vue實例的生命周期
生命周期鉤子(來自vue官方文檔)
所有的生命周期鉤子自動綁定 this
上下文到實例中,因此你可以訪問數據,對屬性和方法進行運算。這意味著你不能使用箭頭函數來定義一個生命周期方法 (例如 created: () => this.fetchTodos()
)。這是因為箭頭函數綁定了父上下文,因此 this
與你期待的 Vue 實例不同,this.fetchTodos
的行為未定義。
beforeCreate
-
類型:
Function
-
詳細:
在實例初始化之後,數據觀測 (data observer) 和 event/watcher 事件配置之前被調用。
-
參考:生命周期圖示
created
-
類型:
Function
-
詳細:
在實例創建完成後被立即調用。在這一步,實例已完成以下的配置:數據觀測 (data observer),屬性和方法的運算,watch/event 事件回調。然而,掛載階段還沒開始,
$el
屬性目前不可見。 -
參考:生命周期圖示
beforeMount
-
類型:
Function
-
詳細:
在掛載開始之前被調用:相關的
render
函數首次被調用。該鉤子在服務器端渲染期間不被調用。
-
參考:生命周期圖示
mounted
-
類型:
Function
-
詳細:
el
被新創建的vm.$el
替換,並掛載到實例上去之後調用該鉤子。如果 root 實例掛載了一個文檔內元素,當mounted
被調用時vm.$el
也在文檔內。註意
mounted
不會承諾所有的子組件也都一起被掛載。如果你希望等到整個視圖都渲染完畢,可以用 vm.$nextTick 替換掉mounted
:該鉤子在服務器端渲染期間不被調用
mounted: function () { this.$nextTick(function () { // Code that will run only after the // entire view has been rendered
-
參考:生命周期圖示
beforeUpdate
-
類型:
Function
-
詳細:
數據更新時調用,發生在虛擬 DOM 打補丁之前。這裏適合在更新之前訪問現有的 DOM,比如手動移除已添加的事件監聽器。
該鉤子在服務器端渲染期間不被調用,因為只有初次渲染會在服務端進行。
-
參考:生命周期圖示
updated
-
類型:
Function
-
詳細:
由於數據更改導致的虛擬 DOM 重新渲染和打補丁,在這之後會調用該鉤子。
當這個鉤子被調用時,組件 DOM 已經更新,所以你現在可以執行依賴於 DOM 的操作。然而在大多數情況下,你應該避免在此期間更改狀態。如果要相應狀態改變,通常最好使用計算屬性或 watcher 取而代之。
註意
updated
不會承諾所有的子組件也都一起被重繪。如果你希望等到整個視圖都重繪完畢,可以用 vm.$nextTick 替換掉updated
:該鉤子在服務器端渲染期間不被調用
updated: function () { this.$nextTick(function () { // Code that will run only after the // entire view has been re-rendered }) }
-
參考:生命周期圖示
activated
-
類型:
Function
-
詳細:
keep-alive 組件激活時調用。
該鉤子在服務器端渲染期間不被調用。
-
參考:
- 構建組件 - keep-alive
- 動態組件 - keep-alive
deactivated
-
類型:
Function
-
詳細:
keep-alive 組件停用時調用。
該鉤子在服務器端渲染期間不被調用。
-
參考:
- 構建組件 - keep-alive
- 動態組件 - keep-alive
beforeDestroy
-
類型:
Function
-
詳細:
實例銷毀之前調用。在這一步,實例仍然完全可用。
該鉤子在服務器端渲染期間不被調用。
-
參考:生命周期圖示
destroyed
-
類型:
Function
-
詳細:
Vue 實例銷毀後調用。調用後,Vue 實例指示的所有東西都會解綁定,所有的事件監聽器會被移除,所有的子實例也會被銷毀。
該鉤子在服務器端渲染期間不被調用。
-
參考:生命周期圖示
errorCaptured
2.5.0+ 新增
-
類型:
(err: Error, vm: Component, info: string) => ?boolean
-
詳細:
當捕獲一個來自子孫組件的錯誤時被調用。此鉤子會收到三個參數:錯誤對象、發生錯誤的組件實例以及一個包含錯誤來源信息的字符串。此鉤子可以返回
false
以阻止該錯誤繼續向上傳播。你可以在此鉤子中修改組件的狀態。因此在模板或渲染函數中設置其它內容的短路條件非常重要,它可以防止當一個錯誤被捕獲時該組件進入一個無限的渲染循環。
錯誤傳播規則
-
默認情況下,如果全局的
config.errorHandler
被定義,所有的錯誤仍會發送它,因此這些錯誤仍然會向單一的分析服務的地方進行匯報。 -
如果一個組件的繼承或父級從屬鏈路中存在多個
errorCaptured
鉤子,則它們將會被相同的錯誤逐個喚起。 -
如果此
errorCaptured
鉤子自身拋出了一個錯誤,則這個新錯誤和原本被捕獲的錯誤都會發送給全局的config.errorHandler
。 -
一個
errorCaptured
鉤子能夠返回false
以阻止錯誤繼續向上傳播。本質上是說“這個錯誤已經被搞定了且應該被忽略”。它會阻止其它任何會被這個錯誤喚起的errorCaptured
鉤子和全局的config.errorHandler
。
-
vue實例的生命周期圖
vue實例的生命周期