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 constructor
và ionViewDidLoad
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.
. angular2 OnInit? Nếu vậy, tại sao không sử dụng OnInit? – Sam
@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
Cảm ơn bạn đã chỉ ra rằng @graphefruit, Tôi đã cập nhật câu trả lời :) – sebaferreras