Vue實(shí)例有一個(gè)完整的生命周期,也就是從開(kāi)始創(chuàng)建、初始化數(shù)據(jù)、編譯模板、掛載Dom、渲染→更新→渲染、銷(xiāo)毀等一系列過(guò)程,我們稱(chēng)這是Vue的生命周期。通俗說(shuō)就是Vue實(shí)例從創(chuàng)建到銷(xiāo)毀的過(guò)程,就是生命周期。
每一個(gè)組件或者實(shí)例都會(huì)經(jīng)歷一個(gè)完整的生命周期,總共分為三個(gè)階段:初始化、運(yùn)行中、銷(xiāo)毀。
beforeCreate:?在實(shí)例初始化之后,數(shù)據(jù)觀測(cè) (data observer) 和 event/watcher 事件配置之前被調(diào)用。
created: 在實(shí)例創(chuàng)建完成后被立即調(diào)用。在這一步,實(shí)例已完成以下的配置:數(shù)據(jù)觀測(cè) (data observer),屬性和方法的運(yùn)算,watch/event 事件回調(diào)。然而,掛載階段還沒(méi)開(kāi)始,$el
?屬性目前不可見(jiàn)。
beforeMount: 在掛載開(kāi)始之前被調(diào)用:相關(guān)的?render
?函數(shù)首次被調(diào)用,接下來(lái)開(kāi)始找實(shí)例或者組件對(duì)應(yīng)的模板,編譯模板為虛擬dom放入到render函數(shù)中準(zhǔn)備渲染。
mounted:el
?被新創(chuàng)建的?vm.$el
?替換,并掛載到實(shí)例上去之后調(diào)用該鉤子。如果 root 實(shí)例掛載了一個(gè)文檔內(nèi)元素,當(dāng)?mounted
?被調(diào)用時(shí)?vm.$el
?也在文檔內(nèi)。接下來(lái)開(kāi)始render,渲染出真實(shí)dom,此時(shí),組件已經(jīng)出現(xiàn)在頁(yè)面中,數(shù)據(jù)、真實(shí)dom都已經(jīng)處理好了,事件都已經(jīng)掛載好了,可以在這里操作真實(shí)dom等事情...
beforeUpdate:數(shù)據(jù)更新時(shí)調(diào)用,發(fā)生在虛擬 DOM 打補(bǔ)丁之前。這里適合在更新之前訪問(wèn)現(xiàn)有的 DOM,比如手動(dòng)移除已添加的事件監(jiān)聽(tīng)器。該鉤子在服務(wù)器端渲染期間不被調(diào)用,因?yàn)橹挥谐醮武秩緯?huì)在服務(wù)端進(jìn)行。
updated:當(dāng)由于數(shù)據(jù)更改導(dǎo)致的虛擬 DOM 重新渲染和打補(bǔ)丁,在這之后會(huì)調(diào)用該鉤子。當(dāng)這個(gè)鉤子被調(diào)用時(shí),組件 DOM 已經(jīng)更新,所以你現(xiàn)在可以執(zhí)行依賴(lài)于 DOM 的操作。然而在大多數(shù)情況下,你應(yīng)該避免在此期間更改狀態(tài)。如果要相應(yīng)狀態(tài)改變,通常最好使用計(jì)算屬性或?watcher?取而代之。
beforeDestroy:當(dāng)經(jīng)過(guò)某種途徑調(diào)用$destroy方法后,實(shí)例銷(xiāo)毀之前調(diào)用。在這一步,實(shí)例仍然完全可用。
destroyed:Vue 實(shí)例銷(xiāo)毀后調(diào)用。調(diào)用后,Vue 實(shí)例指示的所有東西都會(huì)解綁定,所有的事件監(jiān)聽(tīng)器會(huì)被移除,所有的子實(shí)例也會(huì)被銷(xiāo)毀。
生命周期圖示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
在beforeMount之前有無(wú)模板的區(qū)別:
有模板:渲染模板
無(wú)模板:渲染el的掛載點(diǎn),若沒(méi)有el掛載點(diǎn),頁(yè)面上不會(huì)有任何內(nèi)容,此時(shí)就會(huì)去查找是否有vm.$mount(el)
在掛載前后的vm.$el是有區(qū)別的:
beforeUpdate和updated要在數(shù)據(jù)更新時(shí)才會(huì)被調(diào)用:
beforeDestroy和destoryed要在vm.$destory()調(diào)用之后才會(huì)執(zhí)行:
生命周期鉤子函數(shù)的應(yīng)用:
beforecreate
?: 舉個(gè)例子:可以在這加個(gè)loading事件?created
?:在這結(jié)束loading,還做一些初始化,實(shí)現(xiàn)函數(shù)自執(zhí)行?mounted
?: 在這發(fā)起后端請(qǐng)求,拿回?cái)?shù)據(jù),配合路由鉤子做一些事情beforeDestroy
: 你確認(rèn)刪除XX嗎?
destoryed:當(dāng)前組件已被刪除,清空相關(guān)內(nèi)容
來(lái)源:http://www.icode9.com/content-4-153151.html聯(lián)系客服