Vue实例的生命周期: 从创建到销毁的整个过程
Vue框架内置函数,随着组件的生命周期阶段,自动执行
<template>
<div>
<p>学习生命周期 - 看控制台的打印</p>
<p id="mp">{{ msg }}</p>
</div>
</template>
<script>
export default {
//第一阶段 初始化
//new Vue以后,vue内部给实例对象添加了一些属性和方法,data和methods初始化之前
beforeCreate() {
console.log('1.beforeCreate--执行')
console.log('msg', this.msg); //undefined
},
//data和methods初始化以后 不能获取真实的DOM
//场景:网络请求,注册全局事件,绑定页面滚动事件
created() {
console.log('2.created--执行');
console.log('msg', this.msg); //hello word
},
data() {
return {
msg: 'hello word',
}
}
}
</script>
<template>
<div>
<p>学习生命周期 - 看控制台的打印</p>
<p id="mp">{{ msg }}</p>
<ul id="uls">
<li v-for="item in arr">{{ item }}</li>
</ul>
</div>
</template>
<script>
export default {
//第一阶段 初始化
//new Vue以后,vue内部给实例对象添加了一些属性和方法,data和methods初始化之前
beforeCreate() {
console.log('1.beforeCreate--执行')
console.log('msg', this.msg); //undefined
},
//data和methods初始化以后 不能获取真实的DOM
//场景:网络请求,注册全局事件,绑定页面滚动事件
created() {
console.log('2.created--执行');
console.log('msg', this.msg); //hello word
},
//第二阶段 挂载阶段
//真实DOM挂载之前
//场景 预处理data,不会触发updated钩子函数
beforeMount() {
console.log('3.beforeMount--执行');
console.log(document.querySelector('#mp')) //null
this.msg = '重新改变了'
},
//真实DOM挂载之后
//获取挂载后的真实DOM
mounted() {
console.log('4.mounted--执行');
console.log(document.querySelector('#mp')) //p
},
data() {
return {
msg: 'hello word',
arr: [2, 6, 4, 2, 1],
}
}
}
</script>
<template>
<div>
<p>学习生命周期 - 看控制台的打印</p>
<p id="mp">{{ msg }}</p>
<ul id="uls">
<li v-for="item in arr">{{ item }}</li>
</ul>
<button @click="arr.push(1000)">往数组加值</button>
</div>
</template>
<script>
export default {
//第一阶段 初始化
//new Vue以后,vue内部给实例对象添加了一些属性和方法,data和methods初始化之前
beforeCreate() {
console.log('1.beforeCreate--执行')
console.log('msg', this.msg); //undefined
},
//data和methods初始化以后 不能获取真实的DOM
//场景:网络请求,注册全局事件,绑定页面滚动事件
created() {
console.log('2.created--执行');
console.log('msg', this.msg); //hello word
},
//第二阶段 挂载阶段
//真实DOM挂载之前
//场景 预处理data,不会触发updated钩子函数
beforeMount() {
console.log('3.beforeMount--执行');
console.log(document.querySelector('#mp')) //null
this.msg = '重新改变了'
},
//真实DOM挂载之后
//获取挂载后的真实DOM
mounted() {
console.log('4.mounted--执行');
console.log(document.querySelector('#mp')) //p
},
//第三阶段 更新阶段
//更新之前
beforeUpdate() {
console.log('beforeUpdate--执行');
console.log(document.querySelectorAll('#uls>li'))
//点击button按钮 往数组追加一条数据
console.log(document.querySelectorAll('#uls>li')[5]) //undefined
},
//更新之后
// 场景:获取更新后的真实DOM
updated() {
console.log('updated--执行了');
console.log(document.querySelectorAll('#uls>li')[5]) //li
},
data() {
return {
msg: 'hello word',
arr: [2, 6, 4, 2, 1],
}
}
}
</script>
<style scoped></style>
父组件
<div>
<h1>1.生命周期h1>
<Lifes v-if="isShow">Lifes>
<button @click="isShow = false">销毁组件button>
div>
子组件
<template>
<div>
<p>学习生命周期 - 看控制台的打印</p>
<p id="mp">{{ msg }}</p>
<ul id="uls">
<li v-for="item in arr">{{ item }}</li>
</ul>
</div>
</template>
<script>
export default {
created() {
//创建一个定时器
this.timer = setInterval(() => {
console.log('定时器');
}, 1000)
},
//第四阶段 销毁阶段
//前提:v-if="false" 销毁Vue实例
//场景:移除全局的事件 移除当前组件的计时器 定时器 eventBus移除事件$off方法
beforeDestroy() {
console.log('beforeDestroy--执行');
clearInterval(this.timer) //销毁定时器
},
destroyed() {
console.log('destroy--执行');
},
data() {
return {
msg: 'hello word',
timer: null,//保存计时器
}
}
}
</script>
<style scoped></style>