vue 生命週期自理解

1.beforeCreate

實例初始化之後,數據觀測(data observer)和event/watcher 事件配置之前被調用。

data(){

return{

   name:""

 }

}

 beforeCreate() {

      console.log(this.name)  //undefined    methods和watch 裏面的也是用不了的目前

    },

2.created 

在實例創建完成後被立即調用。在這一步,實例已完成以下的配置:數據觀測 (data observer),屬性和方法的運算,watch/event 事件回調。然而,掛載階段還沒開始,$el 屬性目前尚不可用。

<myvue ref="myvue"></myvue>

console.log(this.$refs.myvue)  //報錯  Cannot read property 'myvue' of undefined"

3.beforeMount

在掛載開始之前被調用:相關的 render 函數首次被調用。

該鉤子在服務器端渲染期間不被調用。

<myvue ref="myvue"></myvue>

console.log(this.$refs.myvue)  //報錯  Cannot read property 'myvue' of undefined"

4 mounted

實例被掛載後調用,這時 el 被新創建的 vm.$el 替換了。 如果根實例掛載到了一個文檔內的元素上,當mounted被調用時vm.$el也在文檔內。

注意 mounted 不會保證所有的子組件也都一起被掛載。如果你希望等到整個視圖都渲染完畢,可以在 mounted 內部使用 vm.$nextTick

<myvue ref="myvue"></myvue>

mounted: function () {

 console.log(this.$refs.myvue)  //偶爾報錯  Cannot read property 'myvue' of undefined"  偶爾正常

this.$nextTick(function () { //整個視圖都渲染完成

 console.log(this.$refs.myvue)  //正常

}) }

5. beforeUpdate

數據更新時調用,發生在虛擬 DOM 打補丁之前。這裏適合在更新之前訪問現有的 DOM,比如手動移除已添加的事件監聽器。

該鉤子在服務器端渲染期間不被調用,因爲只有初次渲染會在服務端進行。

//數據更新時

6.updated

由於數據更改導致的虛擬 DOM 重新渲染和打補丁,在這之後會調用該鉤子。

當這個鉤子被調用時,組件 DOM 已經更新,所以你現在可以執行依賴於 DOM 的操作。然而在大多數情況下,你應該避免在此期間更改狀態。如果要相應狀態改變,通常最好使用計算屬性或 watcher 取而代之。

注意 updated 不會保證所有的子組件也都一起被重繪。如果你希望等到整個視圖都重繪完畢,可以在 updated 裏使用 vm.$nextTick

7.activated

被 keep-alive 緩存的組件激活時調用。

該鉤子在服務器端渲染期間不被調用。

8.deactivated

被 keep-alive 緩存的組件停用時調用。

該鉤子在服務器端渲染期間不被調用。

9.beforeDestroy

實例銷燬之前調用。在這一步,實例仍然完全可用。

該鉤子在服務器端渲染期間不被調用。

10 destroyed

實例銷燬後調用。該鉤子被調用後,對應 Vue 實例的所有指令都被解綁,所有的事件監聽器被移除,所有的子實例也都被銷燬。

該鉤子在服務器端渲染期間不被調用。

11 errorCaptured

當捕獲一個來自子孫組件的錯誤時被調用。此鉤子會收到三個參數:錯誤對象、發生錯誤的組件實例以及一個包含錯誤來源信息的字符串。此鉤子可以返回 false 以阻止該錯誤繼續向上傳播。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章