先放一張官網生命週期圖:
vue有8種生命週期函式:
鉤子函式
觸發的行為
在此階段可以做的事情
beforecreadted
vue例項的掛載元素$el和資料物件data都為undefined,還未初始化。
加loading事件
created
vue例項的資料物件data有了,$el還沒有
結束loading、請求資料為mounted渲染做準備
beforemount
vue例項的$el和data都初始化了,但還是虛擬的dom節點,具體的data.filter還未替換。
..mounted
vue例項掛載完成,data.filter成功渲染
配合路由鉤子使用
beforeupdate
data更新時觸發
updated
data更新時觸發
資料更新時,做一些處理(此處也可以用watch進行觀測)
beforedestroy
元件銷毀時觸發
destroyed
元件銷毀時觸發,vue例項解除了事件監聽以及和dom的繫結(無響應了),但dom節點依舊存在
元件銷毀時進行提示
測試**:
元件模板自己試著寫就好,此處貼js**
(省略部分**)
export
default
},beforecreate () ,
created () ,
beforemount () ,
mounted () ,
beforeupdate () ,
updated () ,
beforedestroy () ,
destroyed ()
}
效果:
至於destroyed就不好演示了。
destroyed鉤子函式有一點一定要特別注意:在執行destroy方法後,對data的改變不會再觸發週期函式,此時的vue例項已經解除了事件監聽以及和dom的繫結,但是dom結構依然存在。所以對於實時顯示的通知型元件,在他destroyed之前,我們必須手動removechild()刪除該節點;否則,dom節點還是存在,影響瀏覽器效能。
還有一點需要補充:
元件套用時生命週期:
父元件:tabs
子元件:tab、tab-container
我的應用場景是:
tabs>
/*tabs的列印***/
beforemount () ,
mounted () ,
created ()
/*tab的列印***/
beforemount () ,
mounted () ,
created ()
/*tab-container的列印***/
beforemount () ,
mounted () ,
created ()
瀏覽器結果:
結論:先執行父元件的created和beforemounted函式;再按子元件的使用順序,執行子元件的created和beforemounted函式;依舊按照子元件的執行順序執行mounted函式,最後是父元件的mounted函式;
也就是說父元件準備要掛載還沒掛載的時候,子元件先完成掛載,最後父元件再掛載;所以在真正整個大元件掛載完成之前,內部的子元件和父元件之間的資料時可以流通的(好難表達。。。。)
vue生命週期鉤子函式詳解
先放一張官網生命週期圖 vue有8種生命週期函式 鉤子函式 觸發的行為 在此階段可以做的事情 beforecreadted vue例項的掛載元素 el和資料物件data都為undefined,還未初始化。加loading事件 created vue例項的資料物件data有了,el還沒有 結束load...
vue生命週期,鉤子函式
一 vue生命週期簡介 咱們從上圖可以很明顯的看出現在vue2.0都包括了哪些生命週期的函式了,總結一下,對官方文件的那張圖簡化一下,就得到了這張圖。二 生命週期 對於執行順序和什麼時候執行,看上面圖基本有個了解了。下面我們將結合 去看看鉤子函式的執行。鉤子函式 1.create 和 mounted...
vue 生命週期(鉤子函式)
new vue 例項物件,下一步進入beforcreate 狀態 當使用new vue 建立物件之前,執行的事件 這裡可以做載入動畫 下一步,進入created 然後,他會檢測是否有el屬性,如果有在檢測template屬性型別,是一段渲染的函式還是一段html 然後就進入了beforemount狀...