Vue把整個生命周期划分為創建、掛載、更新、銷毀等階段,每個階段都會給一些“鈎子”讓我們來做一些我們想實現的動作。學習實例的生命周期,能幫助我們理解vue實例的運作機制,更好地合理利用各個鈎子來完成我們的業務代碼。
先看一下官網的生命周期圖例:
如果覺的太復雜,那我們就從簡單的開始學起。
這就是生命周期的8個階段,其中我們將用到最多的鈎子就是:created(成功創建)階段。
下面我們就一 一來學習各個生命階段:
1. beforeCreate(創建之前)
此階段為實例初始化之后,此時的數據觀察和事件配置都沒好准備好。
結果:
data和el還是不可用。
2. Created(成功創建)
beforeCreate之后緊接着的鈎子就是創建完畢created,我們同樣打印一下數據data和掛載元素el,看會得到什么?
增加下述代碼:
我們會發現,我們可以讀取數據data的值,但是DOM沒有生成,el的值還是沒有的。輸出$data為一個Object對象,而$el的值為undefined。
3. beforeMount(掛載之前)
上一個階段我們知道DOM還沒生成,屬性el還為undefined,那么,此階段為即將掛載,我們打印一下此時的$el是什么?
增加一下下面代碼:
結果:
此時的$el不再是undefined,而是成功關聯到我們指定的dom節點<div id=”app”></div>,但此時{{ name }}還沒有被成功地渲染成我們data中的數據。沒事,我們接着往下看。
4.mounted(成功掛載)
mounted也就是掛載完畢階段,到了這個階段,數據就會被成功渲染出來,我們編寫mounted的鈎子,打印$el 看看:
結果:
如我們所願,此時打印屬性el,我們看到{{ name }}已經成功渲染成我們data.name的值
5.beforeUpdate(更新之前)
我們知道,當修改vue實例的data時,vue就會自動幫我們更新渲染視圖,在這個過程中,vue提供了beforeUpdate的鈎子給我們,在檢測到我們要修改數據的時候,更新渲染視圖之前就會觸發鈎子beforeUpdate。
在beforeUpdate階段,視圖並未重新渲染更新。
6.updated(成功更新)
此階段為更新渲染視圖之后,此時再讀取視圖上的內容,已經是最新的內容,視圖已經更新。
7.deforeDestroy(銷毀之前)
調用實例的destroy( )方法可以銷毀當前的組件,在銷毀前,會觸發beforeDestroy鈎子。
8.destroved(成功銷毀)
成功銷毀之后,會觸發destroyed鈎子,此時該實例與其他實例的關聯已經被清除,它與視圖之間也被解綁。
一旦效用實例的$destroy( )方法銷毀之后,實例與視圖的關系解綁,再修改name的值,已於事無補,視圖再也不會更新了,說明實例成功被銷毀了。
9. actived(激活階段)
keep-alive組件被激活的時候調用。
10. deactivated(停用階段)
keep-alive 組件停用時調用。