2016-10-05 41 views
13

Khi chạy ionic g page pageName Tôi nhận được các tệp .ts, .css và .html được tạo.Mục đích của hàm ionViewDidLoad() là gì?

Bên trong tệp .ts Tôi có chức năng được gọi là ionViewDidLoad(){} và điều này đang được in trước khi chế độ xem của tôi xuất hiện.

Điều này có thể được thực hiện trong bản thân nhà xây dựng mà tôi tin?

Ai đó có thể cho tôi một số tham chiếu về bất kỳ blog hoặc giải thích nào về chức năng này không?

Trả lời

21

Bạn nói đúng, rất nhiều thứ có thể được thực hiện cả trong các nhà xây dựng hoặc trong ionViewDidLoad và kết quả sẽ được như vậy ...

Nhưng sự khác biệt chính giữa constructorionViewDidLoad là rằng constructor sẽ chỉ được thực hiện một lần (khi thành phần được khởi tạo) nhưng phương pháp ionViewDidLoad sẽ được thực hiện mỗi lần chế độ xem được nhập (được tải).

Ví dụ: nếu bạn muốn tải dữ liệu từ nguồn dữ liệu từ xa, nếu bạn làm điều đó trong hàm tạo, dữ liệu sẽ chỉ thu được một lần. Nếu dữ liệu đó có thể thay đổi đủ nhanh, cách tiếp cận tốt hơn là lấy nó theo phương pháp ionViewDidLoad, để đảm bảo rằng mỗi lần trang được tải, dữ liệu mới nhất sẽ được thu thập và hiển thị trong dạng xem.

Một thực tế quan trọng khác về ionViewDidLoad là đôi khi bạn muốn tương tác với DOM (có thể để khởi tạo bản đồ).

Trong trường hợp đó, nếu bạn cố gắng truy cập DOM trong hàm tạo, bạn sẽ nhận thấy rằng DOM chưa sẵn sàng vào thời điểm đó và bạn sẽ không thể lấy yếu tố bản đồ. Cách tiếp cận chính xác để làm điều đó sẽ nằm trong số ionViewDidLoad vì tại thời điểm đó (giống như tên nói) lượt xem đã được tải và DOM hiện khả dụng.

UPDATE:

Cũng giống như @graphefruit chỉ ra trong các bình luận dưới đây, trong các phiên bản mới nhất của Ionic 2, ionViewDidLoad chỉ bắn nếu trang đó không được lưu trữ. ionViewWillEnter hoặc ionViewDidEnter sẽ được kích hoạt mỗi khi trang được nhập.

+1

. angular2 OnInit? Nếu vậy, tại sao không sử dụng OnInit? – Sam

+6

@sebaferreras câu trả lời của bạn không chính xác nữa. ionViewDidLoad chỉ kích hoạt nếu trang không được lưu trong bộ nhớ cache. https://ionicframework.com/docs/v2/2.0.0-rc.0/api/navigation/NavController/ 'ionViewWillEnter' hoặc' ionViewDidEnter' sẽ được kích hoạt mọi lúc trang được nhập – graphefruit

+0

Cảm ơn bạn đã chỉ ra rằng @graphefruit, Tôi đã cập nhật câu trả lời :) – sebaferreras

0

constructor được gọi trước khi tất cả, một lần mỗi instantiation of the page, ở đây bạn có thể làm khởi mà không tham khảo DOM HTML

ionViewDidLoad được gọi khi trang DOM đã được nạp, trước hơn trang được hiển thị , cũng là một lần khởi tạo trang, tại đây bạn có thể thực hiện việc khởi tạo trang cần HTML DOM để sẵn sàng

ionViewWillEnter được gọi ngay trước khi trang được hiển thị, có thể nhiều lần nếu trang đó ở chế độ nền và trả về. có thể làm mới dữ liệu nếu nó có thể được thay đổi trong một trang khác

ionViewDidEnter giống nhau nhưng được gọi ngay sau khi trang được hiển thị, có thể nhiều lần nếu trang ở chế độ nền và trả về, ví dụ: bạn có thể hiển thị cảnh báo khi trang trở về trước

Các vấn đề liên quan