每一個 Vue 實例在被建立時都要通過一系列的初始化過程——例如,須要設置數據監聽、編譯模板、將實例掛載到 DOM 並在數據變化時更新DOM等。同時在這個過程當中也會運行一些叫作生命週期鉤子的函數,這給了用戶在不一樣階段添加本身的代碼的機會html
下面逐步解讀各個鉤子函數的步驟vue
優先級: render > template > outerHTMLajax
vm.el已完成DOM的掛載與渲染,此刻打印vm.$el,發現以前的掛載點及內容已被替換成新的DOM算法
經過實例驗證一下chrome
<div id="app">
<h1 ref="h1" id="h1">{{message}}</h1>
<button @click="changeMsg">change</button>
</div>
var vm = new Vue({
el: '#app',
data: {
message: 'Vue的生命週期'
},
template: '<h2 id="h2">{{message}}</h2>',
beforeMount: function() {
console.group('------beforeMount 掛載前------');
console.log(this.$el);
console.log("%c%s", "color:red","data : " + this.$data); //已被初始化
console.log("%c%s", "color:red","message: " + this.message); //已被初始化
let h1 = document.getElementById('h1')
let h2 = document.getElementById('h2')
console.log('h1:',h1)
console.log('h2:',h2)
},
mounted: function() {
console.group('------mounted 掛載完成------');
console.log(this.$el);
console.log("%c%s", "color:red","data : " + this.$data); //已被初始化
console.log("%c%s", "color:red","message: " + this.message); //已被初始化
let h1 = document.getElementById('h1')
let h2 = document.getElementById('h2')
console.log('h1:',h1)
console.log('h2:',h2)
},
}
複製代碼
當渲染在模板上的data數據更新時,會觸發beforeUpdate方法bash
正常更新操做app
beforeUpdate: function () {
console.group('beforeUpdate 更新前===============》');
console.log("%c%s", "color:red","message: " + this.message);
console.log(this.$refs.h1.innerHTML)
},
updated: function () {
console.group('updated 更新完成===============》');
console.log("%c%s", "color:red","message: " + this.message);
console.log(this.$refs.h1.innerHTML)
},
複製代碼
在updated中修改數據dom
beforeUpdate: function () {
console.group('beforeUpdate 更新前===============》');
console.log("%c%s", "color:red","message: " + this.message);
console.log(this.$refs.h1.innerHTML)
},
updated: function () {
console.group('updated 更新完成===============》');
console.log("%c%s", "color:red","message: " + this.message);
console.log(this.$refs.h1.innerHTML)
this.message = 'updated2'
},
複製代碼