Hướng dẫn này trình bày cách hoạt động của vòng đời trang trong một ứng dụng được xây dựng bằng Ionic và Angular.
Sự kiện vòng đời Angular
Ionic bao hàm các sự kiện trong vòng đời do Angular cung cấp. Hai sự kiện Angular bạn sẽ thấy sử dụng nhiều nhất là:
| Tên sự kiện | Sự miêu tả |
|---|---|
ngOnInit | Được kích hoạt một lần trong quá trình khởi tạo thành phần. Sự kiện này có thể được sử dụng để khởi tạo các thành viên cục bộ và thực hiện các cuộc gọi vào các dịch vụ chỉ cần thực hiện một lần. |
ngOnDestroy | Kích hoạt ngay trước khi Angular phá hủy chế độ xem. Hữu ích cho việc dọn dẹp như hủy đăng ký khỏi các trang có thể quan sát. |
Sự kiện trên trang ionic
Ngoài các sự kiện trong vòng đời Angular, Ionic Angular cung cấp một số sự kiện bổ sung mà bạn có thể sử dụng:
| Tên sự kiện | Sự miêu tả |
|---|---|
ionViewWillEnter | Được kích hoạt khi thành phần định tuyến tới sắp chuyển động sang chế độ xem. |
ionViewDidEnter | Được kích hoạt khi định tuyến thành phần đến đã hoàn tất quá trình tạo hoạt ảnh. |
ionViewWillLeave | Kích hoạt khi thành phần định tuyến từ sắp hoạt động. |
ionViewDidLeave | Được kích hoạt khi định tuyến thành phần đến đã hoàn tất quá trình tạo hoạt ảnh. |
Sự khác biệt giữa ionViewWillEntervà ionViewDidEnterlà khi chúng khai hỏa. Phần trước kích hoạt ngay sau ngOnInitnhưng trước khi quá trình chuyển đổi trang bắt đầu và phần sau kích hoạt ngay sau khi quá trình chuyển đổi kết thúc.
Đối với ionViewWillLeavevà ionViewDidLeave, ionViewWillLeaveđược gọi trực tiếp trước khi quá trình chuyển đổi khỏi trang hiện tại bắt đầu và ionViewDidLeavekhông được gọi cho đến sau khi trang mới được chuyển đổi thành công vào (sau khi các trang mới ionViewDidEnterkích hoạt).
How ionic Handles the life of a page
Khi một ứng dụng được bao bọc <ion-router-outlet />, Ionic xử lý điều hướng hơi khác một chút. Khi bạn điều hướng đến một trang mới, Ionic sẽ giữ trang cũ trong DOM hiện có, nhưng ẩn nó khỏi chế độ xem của bạn và chuyển sang trang mới. Lý do chúng tôi làm điều này là gấp đôi:
1) Chúng tôi có thể duy trì trạng thái của trang cũ (dữ liệu trên màn hình, vị trí cuộn, v.v.)
2) Chúng tôi có thể cung cấp quá trình chuyển đổi trở lại trang mượt mà hơn vì nó đã ở đó và không cần phải tạo lại.
Các trang chỉ bị xóa khỏi DOM khi chúng được "xuất hiện", chẳng hạn như bằng cách nhấn nút quay lại trong giao diện người dùng hoặc nút quay lại của trình duyệt.
Do cách xử lý đặc biệt này, các phương thức ngOnInitvà ngOnDestroyphương thức có thể không kích hoạt khi bạn thường nghĩ rằng chúng nên làm như vậy.
ngOnInitsẽ chỉ kích hoạt mỗi khi trang được tạo mới, nhưng không kích hoạt khi được điều hướng trở lại trang. Ví dụ: điều hướng giữa mỗi trang trong giao diện tab sẽ chỉ gọi ngOnInitphương thức của mỗi trang một lần, nhưng không gọi cho các lần truy cập tiếp theo. ngOnDestroysẽ chỉ kích hoạt khi một trang "xuất hiện".
Route Guards
Các phương pháp này đã bị loại bỏ trong Ionic 4 để chuyển sang sử dụng Hệ thống Bảo vệ Tuyến đường của Angular.
Bộ bảo vệ tuyến đường giúp xác định xem liệu một hành động cụ thể có thể được thực hiện đối với một tuyến đường hay không. Chúng là các lớp thực thi một giao diện nhất định. Các giao diện CanActivatevà CanDeactivatecó thể được sử dụng để triển khai cùng một loại logic mà các sự kiện đã loại bỏ ionViewCanEntervà ionViewCanLeaveđã thực hiện.
Để sử dụng bảo vệ này, hãy thêm nó vào tham số thích hợp trong định nghĩa tuyến đường:
Guidance for each life cycle method
Dưới đây là một số mẹo về các trường hợp sử dụng cho từng sự kiện trong vòng đời.
ionViewWillEnter- Vì ionViewWillEnterđược gọi mỗi khi khung nhìn được điều hướng đến (bất kể có được khởi tạo hay không), nên đó là một phương pháp tốt để tải dữ liệu từ các dịch vụ. Tuy nhiên, nếu dữ liệu của bạn quay trở lại trong quá trình hoạt ảnh, nó có thể bắt đầu nhiều thao tác DOM, điều này có thể gây ra một số hoạt ảnh vui nhộn.
ionViewDidEnter- Nếu bạn thấy các vấn đề về hiệu suất do sử dụng ionViewWillEnterkhi tải dữ liệu, bạn có thể thực hiện các cuộc gọi dữ liệu của mình ionViewDidEnterthay thế. Tuy nhiên, sự kiện này sẽ không kích hoạt cho đến khi người dùng nhìn thấy trang, vì vậy bạn có thể muốn sử dụng chỉ báo tải hoặc màn hình khung để nội dung không hiển thị tự nhiên sau khi quá trình chuyển đổi hoàn tất.
ionViewWillLeave- Có thể được sử dụng để dọn dẹp, như hủy đăng ký khỏi các trang có thể quan sát. Vì ngOnDestroycó thể không kích hoạt khi bạn điều hướng từ trang hiện tại, hãy đặt mã dọn dẹp của bạn ở đây nếu bạn không muốn nó hoạt động khi màn hình không ở chế độ xem.
ionViewDidLeave - Khi sự kiện này kích hoạt, bạn biết rằng trang mới đã được chuyển đổi hoàn toàn, vì vậy bất kỳ logic nào bạn có thể không thực hiện thường khi chế độ xem được hiển thị đều có thể xuất hiện ở đây.
ngOnDestroy- Logic dọn dẹp cho các trang mà bạn không muốn dọn dẹp ionViewWillLeave.
Điều hướng
A simple route
Đối với hầu hết các ứng dụng, thường phải có một số loại lộ trình. Cấu hình cơ bản nhất trông giống như sau:Handing Redirects
Đối với điều này, chúng tôi có thể sử dụng chuyển hướng bộ định tuyến. Chuyển hướng hoạt động giống như cách mà một đối tượng định tuyến điển hình làm, nhưng chỉ bao gồm một vài khóa khác nhau.Vì chúng tôi sử dụng full, chúng tôi đang nói với bộ định tuyến rằng chúng tôi nên so sánh đường dẫn đầy đủ, ngay cả khi kết thúc là một cái gì đó như thế nào /route1/route2/route3. Có nghĩa là nếu chúng ta có:
Ngoài ra, nếu chúng tôi sử dụng:
Navigating to defferent routers
Nói về các tuyến đường là tốt và tất cả, nhưng làm thế nào một người thực sự điều hướng đến các tuyến đường đã nói? Đối với điều này, chúng ta có thể sử dụng routerLinkchỉ thị. Hãy quay lại và thực hiện thiết lập bộ định tuyến đơn giản của chúng tôi từ trước:Chúng tôi cũng có thể điều hướng theo chương trình trong ứng dụng của mình bằng cách sử dụng API bộ định tuyến.
Lưu ý về điều hướng với URL tương đối: Hiện tại, để hỗ trợ nhiều ngăn xếp điều hướng, URL tương đối không được hỗ trợ
Lazy loading routes
Bây giờ, cách thiết lập các tuyến đường hiện tại của chúng tôi khiến chúng được đưa vào cùng một đoạn với app.module gốc, điều này không phải là lý tưởng. Thay vào đó, bộ định tuyến có một thiết lập cho phép các thành phần được tách biệt thành các phần riêng của chúng.Ở đây, chúng tôi có thiết lập Mô-đun Angular điển hình, cùng với nhập RouterModule, nhưng chúng tôi hiện đang sử dụng forChildvà khai báo thành phần trong thiết lập đó. Với thiết lập này, khi chúng tôi chạy bản dựng của mình, chúng tôi sẽ tạo ra các phần riêng biệt cho cả thành phần ứng dụng, thành phần đăng nhập và thành phần chi tiết.



0 Nhận xét