(轉自CSDN)面試碰到這個問題了,回想一下,很多問題都是寫程式碼的時候碰到了隨查隨寫缺少總結,真到了要說點什麼的時候就說的亂七八糟,那麼這次就來捋一捋Vue的生命週期
生命週期,就是Vue例項在被建立之前要經過一系列的初始化過程。首先,放一張Vue官網的生命週期圖示。
圖示中可以看到,Vue的生命週期中順序的包含了以下幾個生命週期鉤子,然後結合生命週期我們逐一討論:
- beforeCreate
- created
- beforeMount
- mounted
- beforeUpdate
- updated
- beforeDestroy
- destroyed
1. beforeCreate
在這個生命週期,元件例項剛剛被建立但尚未建立完成,而元件屬性如$el
、data
等都還沒有計算。
2. created
元件例項已建立完成,data
等屬性已繫結完成,但DOM
尚未生成,$el
屬性還不存在
3. beforeMount
即模板編譯、掛載之前,這個生命週期,首先會判斷是否存在el選項,存在則繼續編譯,否則停止編譯、生命週期暫停直到呼叫vm.$mount(el)方法才會繼續向下編譯,這個el引數就是掛載的DOM節點。
接下來會判斷是否存在template
選項,存在則將其作為模板編譯成render函式,否則將el
的外部HTML作為模板編譯。
另外vue物件中存在一個render函式,它的優先順序大於template。
4. mounted
即模板編譯、掛載之後,這裡會給vue例項物件新增$el成員,並且替換掉掛載的DOM元素。舉例而言,我們寫在頁面的<div>{{msg}}</div>
是在這裡把例項裡的msg值渲染上去的。
5. beforeUpdate
data的資料發生改變時,會觸發對應元件的重新渲染,這時可以檢測到data變化但是view還沒有重新渲染。
6. updated
view層被重新渲染,資料更新。
6. beforeDestroy
beforeDestroy在例項被銷燬之前,這時例項仍然完全可用。
7. destroyed
destroyed 在例項被銷燬之後,Vue 例項指示的所有東西都會解繫結,所有的事件監聽器會被移除,所有的子例項也會被銷燬。
生命週期就討論到這裡了,覺得比較抽象的盆友可以自己寫demo測試一下,會更直觀一些,或者參考一下更詳細的文章把。