每個(gè) Vue 實(shí)例在被創(chuàng)建時(shí)都要經(jīng)過(guò)一系列的初始化過(guò)程——例如,需要設(shè)置數(shù)據(jù)監(jiān)聽、編譯模板、將實(shí)例掛載到 DOM 并在數(shù)據(jù)變化時(shí)更新 DOM 等。同時(shí)在這個(gè)過(guò)程中也會(huì)運(yùn)行一些叫做生命周期鉤子的函數(shù)诈豌,這給了用戶在不同階段添加自己的代碼的機(jī)會(huì)。
vue的生命周期各階段都做了什么抒和?
beforeCreate實(shí)例創(chuàng)建前:這個(gè)階段實(shí)例的data矫渔、methods是讀不到的。實(shí)例初始化之后摧莽,數(shù)據(jù)觀測(cè)之前調(diào)用庙洼;
created實(shí)例創(chuàng)建后:這個(gè)階段已經(jīng)完成了數(shù)據(jù)觀測(cè)(data observer),屬性和方法的運(yùn)算镊辕, watch/event 事件回調(diào)油够。mount掛載階段還沒開始,$el 屬性目前不可見征懈,數(shù)據(jù)并沒有在DOM元素上進(jìn)行渲染
beforeMount:在掛載開始之前被調(diào)用:相關(guān)的 render 函數(shù)首次被調(diào)用石咬。
mounted:el選項(xiàng)的DOM節(jié)點(diǎn) 被新創(chuàng)建的 vm.$el 替換,并掛載到實(shí)例上去之后調(diào)用此生命周期函數(shù)卖哎。此時(shí)實(shí)例的數(shù)據(jù)在DOM節(jié)點(diǎn)上進(jìn)行渲染
beforeUpdate:數(shù)據(jù)更新時(shí)調(diào)用鬼悠,但不進(jìn)行DOM重新渲染,在數(shù)據(jù)更新時(shí)DOM沒渲染前可以在這個(gè)生命函數(shù)里進(jìn)行狀態(tài)處理
updated:這個(gè)狀態(tài)下數(shù)據(jù)更新并且DOM重新渲染亏娜,當(dāng)這個(gè)生命周期函數(shù)被調(diào)用時(shí)焕窝,組件 DOM 已經(jīng)更新,所以你現(xiàn)在可以執(zhí)行依賴于 DOM 的操作照藻。當(dāng)實(shí)例每次進(jìn)行數(shù)據(jù)更新時(shí)updated都會(huì)執(zhí)行
beforeDestory:實(shí)例銷毀之前調(diào)用袜啃。
destroyed:Vue 實(shí)例銷毀后調(diào)用汗侵。調(diào)用后幸缕,Vue 實(shí)例指示的所有東西都會(huì)解綁定群发,所有的事件監(jiān)聽器會(huì)被移除,所有的子實(shí)例也會(huì)被銷毀发乔。
vue生命周期在真實(shí)場(chǎng)景下的業(yè)務(wù)應(yīng)用
created:進(jìn)行ajax請(qǐng)求異步數(shù)據(jù)的獲取熟妓、初始化數(shù)據(jù)
mounted:掛載元素內(nèi)dom節(jié)點(diǎn)的獲取
nextTick:針對(duì)單一事件更新數(shù)據(jù)后立即操作dom
注意?updated?不會(huì)承諾所有的子組件也都一起被重繪。如果你希望等到整個(gè)視圖都重繪完畢栏尚,可以用?vm.$nextTick?替換掉?updated:
updated:任何數(shù)據(jù)的更新起愈,如果要做統(tǒng)一的業(yè)務(wù)邏輯處理
watch:監(jiān)聽具體數(shù)據(jù)變化,并做相應(yīng)的處理
作者:jirengu_楊然
鏈接:http://www.reibang.com/p/f24d2f6e70f1#comments
來(lái)源:簡(jiǎn)書
著作權(quán)歸作者所有译仗。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)抬虽,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。