2016-10-05 32 views
13

正在運行ionic g page pageName我生成了.ts,.css和.html文件。ionViewDidLoad()函數的用途是什麼?

在.ts文件中我有一個叫做ionViewDidLoad(){}的函數,在我的視圖出現之前就會打印出來。

這可以在構造函數本身完成,我相信嗎?

有人可以給我一些有關此功能的博客或解釋的參考?

回答

21

你說得對,很多事情可無論是在構造函數或ionViewDidLoad,結果是一樣的做...

constructorionViewDidLoad之間的主要區別是constructor將只執行一次(當組件被實例化時),但是每次執行方法該視圖被輸入(加載)。例如,如果要從遠程數據源加載數據,如果在構造函數中執行該操作,則只會獲取一次數據。如果數據可能變化得足夠快,更好的方法是在ionViewDidLoad方法中獲取它,以確保每次加載頁面時,都會獲取最新數據並顯示在視圖中。

關於ionViewDidLoad的另一個重要事實是,有時您想與DOM進行交互(可能是爲了初始化地圖)。

在這種情況下,如果您嘗試訪問構造函數中的DOM,您將會注意到DOM沒有準備好該點,並且您將無法獲取地圖元素。正確的做法是在ionViewDidLoad之內,因爲在那個時候(就像名稱所述)視圖已經加載,並且DOM現在可用。

UPDATE:

就像@graphefruit在下面的評論中指出,在離子2的最新版本ionViewDidLoad如果頁面不被緩存只是觸發。每次輸入頁面時,將會觸發ionViewWillEnterionViewDidEnter

+1

與之相同angular2 OnInit?如果是這樣,爲什麼不使用OnInit? – Sam

+6

@sebaferreras你的答案不再正確。如果頁面沒有被緩存,ionViewDidLoad會觸發。 https://ionicframework.com/docs/v2/2.0.0-rc.0/api/navigation/NavController/'ionViewWillEnter'或'ionViewDidEnter'將在每次輸入頁面時觸發 – graphefruit

+0

感謝您指出@graphefruit,我已經更新了答案:) – sebaferreras

0

constructor被調用之前所有的,一旦每個頁面的實例,在這裏你可以做初始化這並不是指的HTML DOM

ionViewDidLoad是當頁面的DOM已經加載調用,比之前的頁面顯示,也可以每頁實例化一次,在這裏你可以做初始化它需要HTML DOM準備好

ionViewWillEnter在頁面顯示之前被調用,也許多次如果頁面在後臺運行並返回,在這裏你如果可以在其他頁面中更改數據,則可以刷新數據

ionViewDidEnter是相同的,但在頁面顯示後即可調用,也可以在頁面進入後臺並返回時多次調用,例如,當頁面變爲前面時可以顯示提醒

相關問題