在vue的建立,使用,銷毀過程中,會有許多事件,這些事件就被統稱為生命週期函式,也叫作生命週期鉤子。
一般來說,生命週期包括:
beforecreat created beforemount mounted beforeupdate updated
beforedestory destoryed
首先,我們可以進行簡單的歸類:
建立期間生命週期函式:beforecreat,created,beforemount,mounted
執行期間生命週期函式:beforeupdate,updated
銷毀期間生命週期函式:beforedestroy,destroyed
建立階段:
第乙個生命週期函式:beforecreat,當執行beforecreat生命週期函式時,vue例項
還沒有被完全建立出來,此時data,methods等內部沒有初始化,我們這個時候在函式
內呼叫資料的話,後台會顯示undefined。把data選項上的屬性放到this上,遍歷data
選項,給每個屬性新增getter/setter(劫持)
第二個生命週期函式:created,執行這個函式的時候,vue例項已經初始化了,可以在
這裡呼叫資料,不過還沒渲染到頁面上。 在當前函式中我們可以訪問到data中的屬性,
此時,會將data中的屬性和methods的方法新增到vue的例項身上,同時會將data中所
有的屬性新增乙個getter/setter方法。如果需要進行前後端上資料互動(ajax請求的
時候) 需要在當前生命週期中使用。找el、找template,得到有效的檢視結構,把
template選項編譯成render函式(為了生成虛擬dom作準備)
第三個生命週期函式:beforemount,這時,呼叫render方法第一次生成虛擬dom,vue
已經將模板字串編譯成記憶體dom,模板已經編譯完成,還沒有渲染到頁面上。
'ps:什麼是虛擬dom?本質上就是乙個json資料,用於描述檢視結構,儲存在檢視中
為什麼要使用虛擬dom呢?有了虛擬dom,就可以避免我們頻繁的操作dom,降低人為的dom
濫用,可以提公升web的效能。根據虛擬dom結構,第一次初始化檢視結構(生成真實的dom),
這裡會產生第一次的touch,toach的結果是依賴收集'
第四個生命週期函式:mounted,建立階段完成,頁面渲染完畢,進入執行階段。此時
我們可以通過$refs來訪問到真實的dom結構。ref類似與id一樣 值必須是唯一的,訪問
的時候我們可以使用this.$refs.屬性
執行階段
當資料發生變化,比如觸發了點選事件改動資料
beforeupdate:記憶體中的資料已經改變,頁面上的還沒更新根據新的data,render生成新
的虛擬dom,此時在電腦記憶體中就有了兩個虛擬dom。patch(newvnode、oldvnode) => diff,
使用diff運算找出新舊虛擬dom之間的最小差異,通知watcher來更新它們,檢視再次更新完成。
updated:頁面上資料和記憶體中的一致,條件:當路由切換或呼叫this.$destroy()時
銷毀階段
beforedestroy:出發這個函式時,還沒開始銷毀,此時剛剛脫離執行階段。data,methods,
指令之類的都在正常執行。在這個生命週期函式中我們可以將繫結的事件進行移除。清除快取,
關閉定時器。拆卸掉當前元件對應的watcher、解綁當前元件中事件處理器;遞迴拆卸掉(強制
銷毀)所有的子元件。
destroyed:元件銷毀完畢,data,methods,指令之類的不可用。
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...