Vue實例有一個完整的生命周期谜慌,也就是從開始創(chuàng)建、初始化數據莺奔、編譯模板欣范、掛載Dom、渲染→更新→渲染、卸載等一系列過程恼琼,我們稱這是Vue的生命周期杖刷。通俗說就是Vue實例從創(chuàng)建到銷毀的過程,就是生命周期驳癌。
在Vue的整個生命周期中滑燃,它提供了一系列的事件,可以讓我們注冊js方法颓鲜,可以讓我們達到控制整個過程的目的地表窘。值得注意的是,在這些事件響應方法中的this直接指向的是vue的實例甜滨。
首先看看下面官網的一張生命周期的圖乐严,看看整體的流程:
Vue提供的可以注冊的鉤子都在上圖片的紅色框標注。 它們是:
beforeCreate
在實例初始化之后衣摩,數據觀測(data observer) 和 event/watcher 事件配置之前被調用昂验。
created
實例已經創(chuàng)建完成之后被調用。在這一步艾扮,實例已完成以下的配置:數據觀測(data observer)既琴,屬性和方法的運算, watch/event 事件回調泡嘴。然而甫恩,掛載階段還沒開始,$el 屬性目前不可見酌予。
beforeMount
在掛載開始之前被調用:相關的 render 函數首次被調用磺箕。
mounted
el 被新創(chuàng)建的vm.el替換,并掛載到實例上去之后調用該鉤子抛虫。如果 root 實例掛載了一個文檔內元素松靡,當 mounted 被調用時 vm.$el 也在文檔內。
beforeUpdate
數據更新時調用建椰,發(fā)生在虛擬 DOM 重新渲染和打補丁之前雕欺。 你可以在這個鉤子中進一步地更改狀態(tài),這不會觸發(fā)附加的重渲染過程广凸。
updated
由于數據更改導致的虛擬 DOM 重新渲染和打補丁阅茶,在這之后會調用該鉤子蛛枚。
當這個鉤子被調用時谅海,組件 DOM 已經更新,所以你現在可以執(zhí)行依賴于 DOM 的操作蹦浦。然而在大多數情況下扭吁,你應該避免在此期間更改狀態(tài),因為這可能會導致更新無限循環(huán)。
該鉤子在服務器端渲染期間不被調用侥袜。
beforeDestroy
實例銷毀之前調用蝌诡。在這一步,實例仍然完全可用枫吧。
destroyed
Vue 實例銷毀后調用浦旱。調用后,Vue 實例指示的所有東西都會解綁定九杂,所有的事件監(jiān)聽器會被移除颁湖,所有的子實例也會被銷毀。 該鉤子在服務器端渲染期間不被調用例隆。
var app = new Vue({
el: '#app',
data: {
number: 1
},
beforeCreate: function () {
console.log('beforeCreate 鉤子執(zhí)行...');
console.log(this.number)
},
cteated: function () {
console.log('cteated 鉤子執(zhí)行...');
console.log(this.number)
},
beforeMount: function () {
console.log('beforeMount 鉤子執(zhí)行...');
console.log(this.number)
},
mounted: function () {
console.log('mounted 鉤子執(zhí)行...');
console.log(this.number)
},
beforeUpdate: function () {
console.log('beforeUpdate 鉤子執(zhí)行...');
console.log(this.number)
},
updated: function () {
console.log('updated 鉤子執(zhí)行...');
console.log(this.number)
},
beforeDestroy: function () {
console.log('beforeDestroy 鉤子執(zhí)行...');
console.log(this.number)
},
destroyed: function () {
console.log('destroyed 鉤子執(zhí)行...');
console.log(this.number)
},
});