5. Vue生命周期
所有的生命周期鉤子自動綁定 this
上下文到實例中,因此你可以訪問數(shù)據(jù)隔躲,對屬性和方法進行運算。這意味著你不能使用箭頭函數(shù)來定義一個生命周期方法 (例如 created: () => this.fetchTodos()
)。這是因為箭頭函數(shù)綁定了父上下文坊秸,因此 this
與你期待的 Vue 實例不同,this.fetchTodos
的行為未定義澎怒。
5.1 生命周期圖示
5.2 生命周期方法
beforeCreate
類型:
Function
-
詳細:
在實例初始化之后褒搔,數(shù)據(jù)觀測 (data observer) 和 event/watcher 事件配置之前被調用。
created
類型:
Function
-
詳細:
在實例創(chuàng)建完成后被立即調用喷面。在這一步星瘾,實例已完成以下的配置:數(shù)據(jù)觀測 (data observer),屬性和方法的運算惧辈,watch/event 事件回調琳状。然而,掛載階段還沒開始盒齿,
$el
屬性目前不可見念逞。
beforeMount
類型:
Function
-
詳細:
在掛載開始之前被調用:相關的
render
函數(shù)首次被調用困食。該鉤子在服務器端渲染期間不被調用。
mounted
類型:
Function
-
詳細:
el
被新創(chuàng)建的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
-
詳細:
數(shù)據(jù)更新時調用仰剿,發(fā)生在虛擬 DOM 打補丁之前。這里適合在更新之前訪問現(xiàn)有的 DOM痴晦,比如手動移除已添加的事件監(jiān)聽器南吮。
該鉤子在服務器端渲染期間不被調用,因為只有初次渲染會在服務端進行誊酌。
updated
類型:
Function
-
詳細:
由于數(shù)據(jù)更改導致的虛擬 DOM 重新渲染和打補丁部凑,在這之后會調用該鉤子。
當這個鉤子被調用時碧浊,組件 DOM 已經更新涂邀,所以你現(xiàn)在可以執(zhí)行依賴于 DOM 的操作。然而在大多數(shù)情況下箱锐,你應該避免在此期間更改狀態(tài)比勉。如果要相應狀態(tài)改變,通常最好使用計算屬性或 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 組件激活時調用臊恋。
該鉤子在服務器端渲染期間不被調用衣洁。
-
參考:
beforeDestroy
類型:
Function
-
詳細:
實例銷毀之前調用。在這一步抖仅,實例仍然完全可用闸与。
該鉤子在服務器端渲染期間不被調用。
destroyed
類型:
Function
-
詳細:
Vue 實例銷毀后調用岸售。調用后践樱,Vue 實例指示的所有東西都會解綁定,所有的事件監(jiān)聽器會被移除凸丸,所有的子實例也會被銷毀拷邢。
該鉤子在服務器端渲染期間不被調用。
errorCaptured
2.5.0+ 新增
類型:
(err: Error, vm: Component, info: string) => ?boolean
-
詳細:
當捕獲一個來自子孫組件的錯誤時被調用屎慢。此鉤子會收到三個參數(shù):錯誤對象瞭稼、發(fā)生錯誤的組件實例以及一個包含錯誤來源信息的字符串忽洛。此鉤子可以返回
false
以阻止該錯誤繼續(xù)向上傳播。
你可以在此鉤子中修改組件的狀態(tài)环肘。因此在模板或渲染函數(shù)中設置其它內容的短路條件非常重要欲虚,它可以防止當一個錯誤被捕獲時該組件進入一個無限的渲染循環(huán)。
錯誤傳播規(guī)則
- 默認情況下悔雹,如果全局的
config.errorHandler
被定義复哆,所有的錯誤仍會發(fā)送它,因此這些錯誤仍然會向單一的分析服務的地方進行匯報腌零。 - 如果一個組件的繼承或父級從屬鏈路中存在多個
errorCaptured
鉤子梯找,則它們將會被相同的錯誤逐個喚起。 - 如果此
errorCaptured
鉤子自身拋出了一個錯誤益涧,則這個新錯誤和原本被捕獲的錯誤都會發(fā)送給全局的config.errorHandler
锈锤。 - 一個
errorCaptured
鉤子能夠返回false
以阻止錯誤繼續(xù)向上傳播。本質上是說“這個錯誤已經被搞定了且應該被忽略”闲询。它會阻止其它任何會被這個錯誤喚起的errorCaptured
鉤子和全局的config.errorHandler
久免。
5.3 如何使用聲明周期方法
new Vue({
el:'#app',
data:{
userList:null
},
//Vue對象實例創(chuàng)建成功以后就會自定調用這個方法
created:function(){
this.getdata();
},
methods:{
getdata:function(){
//請求的url
var url = 'https://www.layui.com/demo/table/user/';
//利用vue-resource發(fā)出Ajax請求
this.$http.get(url)//發(fā)出請求
.then(function(response){//獲取服務器返回的數(shù)據(jù)
this.userList = response.body;//獲取當前url響應回來的數(shù)據(jù)
});
}
}
})
注意:data中定義的變量只有在created及以后方法才能獲取到。