vue生命週期

2021-08-17 06:39:36 字數 3029 閱讀 7738

vue把整個生命週期劃分為建立、掛載、更新、銷毀等階段,每個階段都會給一些「鉤子」讓我們來做一些我們想實現的動作。學習例項的生命週期,能幫助我們理解vue例項的運作機制,更好地合理利用各個鉤子來完成我們的業務**。

我們分別來看看這幾個階段:

1. beforecreate

此階段為例項初始化之後,此時的資料觀察和事件配置都沒好準備好。

我們試著console一下例項的資料data和掛載元素el,**如下:

data:,

beforecreate()

}); 

得到的結果是:

此時的例項中的data和el還是undefined,不可用的。

2. created

beforecreate之後緊接著的鉤子就是建立完畢created,我們同樣列印一下資料data和掛載元素el,看會得到什麼?

created()
我們看到列印的結果:

此時,我們能讀取到資料data的值,但是dom還沒生成,所以屬性el還不存在,輸出$data為乙個object物件,而$el的值為undefined。

3. beforemount

上乙個階段我們知道dom還沒生成,屬性el還為undefined,那麼,此階段為即將掛載,我們列印一下此時的$el是什麼?

增加一下**:

beforemount()
我們看到列印結果:

mounted也就是掛載完畢階段,到了這個階段,資料就會被成功渲染出來,我們編寫

mounted

的鉤子,列印

$el看看:

mounted()
列印結果:

如我們所願,此時列印屬性el,我們看到}已經成功渲染成我們data.name的值:「前端君」。

5. beforeupdate

我們知道,當修改

vue例項的

data

時,vue

就會自動幫我們更新渲染檢視,在這個過程中,

vue提供了

beforeupdate

的鉤子給我們,在檢測到我們要修改資料的時候,更新渲染檢視之前就會觸發鉤子

beforeupdate。

html片段**我們加上ref屬性,用於獲取dom元素(後期會講到)。

vue例項**加上beforeupdate鉤子**:

beforeupdate(),
我們試一下,在控制台修改一下例項的資料name,在更新渲染之前,我們列印檢視中文字innerhtml的內容會是多少:

(gif圖,載入需要點時間)

6. updated

此階段為更新渲染檢視之後,此時再讀取檢視上的內容,已經是最新的內容,接著上面的案例,我們新增鉤子

updated

的**,如下:

updated()
結果如下:

(gif圖,多看2遍,注意檢視變化)

大家注意兩個不同階段列印的name的值是不一樣,updated階段列印出來的name已經是最新的值:「web前端教程」,說明此刻檢視已經更新了。

7. beforedestroy

呼叫例項的destroy( )方法可以銷毀當前的元件,在銷毀前,會觸發beforedestroy鉤子。

8. destroyed

成功銷毀之後,會觸發destroyed鉤子,此時該例項與其他例項的關聯已經被清除,它與檢視之間也被解綁。

案例:我們通過在銷毀前通過控制台修改例項的

name

,和銷毀之後再次修改,看看情況。

beforedestroy(),

destroyed()

效果如下圖:

(gif圖,多看2遍,注意檢視變化)

銷毀之前,修改name的值,可以成功修改檢視顯示的內容為:「更新檢視」,一旦效用例項的$destroy( )方法銷毀之後,例項與檢視的關係解綁,再修改name的值,已於事無補,檢視再也不會更新了,說明例項成功被銷毀了。

keep-alive元件被啟用的時候呼叫。

10. deactivated

keep-alive 元件停用時呼叫。 關於

keep-alive

元件的啟用和停用,我們後面講到具體案例再介紹,在這裡你只需要知道

vue提供了

keep-alive

元件啟用和停用的鉤子就可以了。

本節小結

掌握例項生命週期的8個階段:

(生命週期示例圖)

以後最為常用的鉤子是:created 成功建立。

vue生命週期

beforecreate 元件例項剛剛被建立,屬性都沒有 create 例項已經建立完成,屬性已經繫結 beforemount 模板編譯之前 mounted 模板編譯之後 beforeupdate 元件更新之前 updated 元件更新完畢 beforedestroy 元件銷毀之前 destroye...

Vue 生命週期

import vue from vue el root 沒有的話,使用render,繼續沒有,就把el的outerhtml編譯成模板 template temp data beforecreate created el是原來的el beforemount 渲染函式 render h this.tex...

Vue生命週期

vue生命週期 beforecreate created beforemount mounted beforeupdate updated beforedestroy destoryed beforecreate data el均未定義 created data已繫結,掛載階段還未開始 el未定義 ...