vue的四个生命周期
Vue的一生包含四个阶段:创建->挂载->更新->销毁
1、创建
<div id="app">
<son></son>
</div>
<!-- 子组件 -->
<template id="son">
<div >
这里是子组件
<p ref="p">{{num}}</p>
</div>
</template>
<script>
Vue.component('son', {
template: '#son',
data() {
return {
num: 4
}
},
beforeCreate(){
// 实例已经创建 事件 生命周期ok 没有数据,没有真实dom
console.log('beforeCreate')
console.log(this)
console.log(this.num)
console.log(this.$refs.p)
},
created() {
console.log('created')
//创建结束 有数据 有this 没有真实dom
// 修改数据,并且不会触发更新相关的生命周期
// 网络请求数据
console.log(this)
this.num = 5
console.log(this.num) // 数据有
console.log(this.$refs.p) // 没有
}
})
new Vue({}).$mount('#app')
</script>
2、挂载
div id="app">
<son></son>
</div>
<!-- 子组件 -->
<template id="son">
<div >
这里是子组件
<p ref="p">{{num}}</p>
</div>
</template>
<script>
Vue.component('son', {
template: '#son',
data() {
return {
num: 4
}
},
beforeMount(){
// 和created类似 有this 有数据 无dom
// 修改数据和网络请求
console.log('beforeMount')
console.log(this)
console.log(this.num)
console.log(this.$refs.p)
},
mounted() {
// 什么都有 有this,有数据,有真实dom
// dom初始化的操作
// 做数据修改会触发到update的生命周期
console.log('mounted')
console.log(this)
console.log(this.num) // 数据有
this.num = 5
console.log(this.$refs.p) // 没有
}
})
new Vue({}).$mount('#app')
</script>
3、更新
<div id="app">
<son></son>
</div>
<!-- 子组件 -->
<template id="son">
<div >
这里是子组件
<p ref="p">{{num}}</p>
<button @click="change"> 改变</button>
</div>
</template>
<script>
Vue.component('son', {
template: '#son',
data() {
return {
num: 4
}
},
methods: {
change() {
this.num ++;
}
},
// beforeMount() {
// this.num = 5
// },
// mounted() {
// this.num = 5
// },
beforeUpdate() {
// 挂载之后数据更新的时候触发,数据发生改变,dom还未修改
console.log('更新之前')
console.log(this)
console.log(this.num) // 更新后的数据
// this.num = 8
console.log(this.$refs.p) // 更新前的数据
console.log(this.$refs.p.innerHTML) // 更新前的数据
setTimeout(()=>{
console.log('setTimeOut',this.$refs.p.innerHTML) // 更新后的数据
})
},
updated() {
// 数据和dom都是最新的
// 更新的声明周期做数据的修改?
console.log('更新结束')
console.log(this)
// this.num = 8;
// this.num = Math.random();
// 做数据修改注意在注意!!!!!
console.log(this.num) // 更新后的数据
console.log(this.$refs.p) // 更新前的数据
console.log(this.$refs.p.innerHTML) // 更新前的数据
}
})
new Vue({}).$mount('#app')
</script>
4、销毁
<div id="app">
<button @click="toggle">销毁</button>
<son class="son" v-if="show"></son>
</div>
<!-- 子组件 -->
<template id="son">
<div >
<p ref="p">这里是子组件 {{num}}</p>
</div>
</template>
<script>
Vue.component('son', {
template: '#son',
data() {
return {
num: 4
}
},
mounted() {
this.timmer= setInterval(() => {
console.log(1)
}, 1000);
},
beforeDestroy() {
console.log('销毁之前')
// 啥都有但是没什么用
console.log(this)
console.log(this.num)
console.log(this.$refs.p)
},
destroyed() {
// 销毁完成 回顾一生 弥补遗憾
clearInterval(this.timmer)
console.log('销毁结束')
console.log(this)
console.log(this.num)
console.log(this.$refs.p)
}
})
new Vue({
data: {
show: true,
},
methods: {
toggle() {
this.show = !this.show
}
}
}).$mount('#app')
</script>
Vue的生命周期细致的划分可以分为八个阶段,分别是:创建前(beforeCreate)、创建后(created)、挂载前(beforeMount)、挂载后(mounted)、更新前(beforeUpdate)、更新后(updated)、销毁前(beforeDestroy)、销毁后 (destroyed),如下图:

浙公网安备 33010602011771号