生命週期:乙個元件從建立到銷毀的一系列過程就叫做這個元件的生命週期。
每乙個元件或者例項都會經歷乙個完整的生命週期,乙個生命週期總共分為三個階段,其中又共包含了八種生命週期鉤子函式:
初始階段:beforecreate ; created ; beforemount ; mounted
執行階段:beforeupdate ; updated
銷毀階段: beforedestroy ; destroyed
如下列的生命週期圖:
1.beforecreate這個鉤子函式在建立元件初始化的時候會立刻執行,並且在這個鉤子函式裡是獲取不到資料的,而此時頁面中的真實dom節點為null,沒有掛在出來。
2.created這個鉤子函式內部的資料已經掛載了,但真實dom節點也還是沒有渲染出來,通常會在這個鉤子函式裡面進行ajax的非同步操作。
3.beforemount是讓元件或者實列去查詢各自的模板,而後將其編譯成虛擬dom,即將放入render函式中做初始化渲染操作。
4.mounted這是初始化階段的最後乙個鉤子函式,資料掛在完成,真實的dom已經渲染出來了。
5.beforeupdate這個鉤子函式只有當dom掛載完成,並且進行資料的更新時,才會被執行。
6.updated這個鉤子函式裡dom獲取的資料內容是更新後的資料內容。
7.beforedestroy元件銷毀時觸發,在銷毀前可以清楚一些事件繫結。
8.destroyed元件銷毀時觸發,vue例項解除了事件監聽以及和dom的繫結(無響應了),但dom節點依舊是存在的
下面是乙個swiper輪播圖案列:
注:因為這個案例主要是便於讓我們更好的去理解生命週期,所以只有部分(主要)**,只要知道我們遇到生命週期什麼問題,怎麼解決就可以了,下面會說到
建立結構模板的**:
"box"
>
<
/my-banner>
<
/div>
"my-banner"
>
="swiper-container"
>
=>
="swiper-slide" v-
for=
"banner in banners"
>
"100%"
:src=
"banner.image" alt=
"">
<
/div>
<
/div>
<
/div>
<
/template>js**:
vue.
component
("my-banner",}
,created()
)})}
})
如果向上面這樣寫的話,就會出現bug——輪播圖划動不了
解決:頁面當中的swiper-slide真實dom全都渲染完畢了,再去進行swiper的例項化操作,也就是把new swiper(".swiper-container",)放到最後操作
下面例舉了哪種鉤子函式能夠解決成功:
beforemount 鉤子函式不能解決,因為這個時候真實的dom還沒有渲染出來,這個鉤子函式獲取不到真實dom的結構。
created()
)},beforemount()
)}
mounted 鉤子函式也不能解決,因為上面是非同步的過程,他不會阻止後續mounted的相關操作。內部的非同步請求邊去進行請求資料的同時,下面的mounted鉤子函式也正在執行,當資料回來進行進行更改操作,其實這個例項化操作早就結束了
created()
)},mounted()
)}
beforeupdate 這個鉤子函式裡面也不可以,因為當dom掛載完畢的時候,當資料發生改變的時候,他會立馬執行!
created()
)},beforeupdate()
)}
updated 這個鉤子函式是可以的,當資料發生改變的時候,引發虛擬dom的對比,虛擬dom對比完成後,再去渲染真實的dom結構當真實的dom結構渲染完成後,內部才會執行updated鉤子函式
created()
)},updated()
)}
最後理解了vue的生命週期鉤子函式的執行,我們就知道在哪個階段,我們可以做些什麼了 vue生命週期
beforecreate 元件例項剛剛被建立,屬性都沒有 create 例項已經建立完成,屬性已經繫結 beforemount 模板編譯之前 mounted 模板編譯之後 beforeupdate 元件更新之前 updated 元件更新完畢 beforedestroy 元件銷毀之前 destroye...
vue生命週期
vue把整個生命週期劃分為建立 掛載 更新 銷毀等階段,每個階段都會給一些 鉤子 讓我們來做一些我們想實現的動作。學習例項的生命週期,能幫助我們理解vue例項的運作機制,更好地合理利用各個鉤子來完成我們的業務 我們分別來看看這幾個階段 1.beforecreate 此階段為例項初始化之後,此時的資料...
Vue 生命週期
import vue from vue el root 沒有的話,使用render,繼續沒有,就把el的outerhtml編譯成模板 template temp data beforecreate created el是原來的el beforemount 渲染函式 render h this.tex...