id: vue1 title: Vue实例生命周期 author: triumph author_title: Vue生命周期 author_url: https://github.com/triumph-star author_image_url: https://avatars1.githubusercontent.com/u/62491299?s=460&u=5ac99fc28c82063aa357d074bfe184e50f10a4b4&v=4 tags: [Vue]
Vue实例的生命周期
生命周期 :从实例创建、运行到销毁期间,总是伴随着各种各样的事件,这些事件统称为生命周期. vue每个组件都是独立的,每个组件都有一个属于它的生命周期,从一个组件创建、数据初始化、挂载、更新、销毁,生命周期钩子 :就是生命周期事件的别名
主要的生命周期函数:
被创建期间的生命周期函数 : + beforeCreate():实例在内存中被创建出来,此时,还没有初始化data和methods属性 + created(): 实例已经在内存中创建完成,此时data和methods已经创建完成,此时还没有开始编译模板 + beforeMount():此时已经完成了模板的编译,但是还没有挂载到页面中 + mounted():此时,已经将编译好的模板,挂载到了页面指定的容器中显示
运行期间的生命周期函数 : + beforeUpdate(): 状态更新之前执行次函数,此时data中的状态是最新的,但是界面数据并未更新,因为此时还未重新渲染DOM节点 + updated():实例更新完成后调用此函数,此时data中的状态值和界面上显示的数据都已经完成了更新。界面也已经被重新渲染完成。
销毁期间的生命周期函数 : + beforeDestroy: 实例销毁之前调用,此时,实例仍然可以可用。 + destroyed: Vue实例销毁后调用,调用后,Vue实例指示的所有东西都会被解绑,事件监听器被全部移除,所有子实例也一样。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<title>Vue生命周期</title>
</head>
<body>
<div id="app">
<h1 id="h1">{{msg}}</h1>
<button @click="msg='react'" >修改</button>
</div>
</body>
</html>
<script>
const vm = new Vue({
el: "#app",
data: {
msg: "Vue"
},
methods: {
show() {
console.log('执行了show()');
}
},
beforeCreate() {
console.log("实例被创建之前");
},
created() {
console.log("实例被创建");
},
beforeMount() {
console.log("实例被挂载之前");
},
mounted() {
console.log("实例挂载完成");
},
beforeUpdate() {
console.log("更新data");
},
updated() {
console.log("同步data和页面数据");
},
beforeDestroy() {
},
destroyed() {
},
});
</script>
此段来自
- 常用的生命周期方法:create()/mounted():常用于发送Ajax请求启动定时器等异步任务,beforeDestory():常用于做一些收尾工作,例如关闭定时器;
<body>
<div id="app">
<button @click= "destroyVm">点击我取消Vue实例</button>
<p v-show = "isShow">我是四川码酱</p>
</div>
<script src="js/vue.js" type="text/javascript"></script>
<script type="text/javascript">
new Vue({
el: "#app",
data: {
isShow: true
},
beforeCreate() {
console.log("我是beforeCreate方法,我被执行了");
},
created() {
console.log("我是created方法,我被执行了");
},
beforeMount() {
console.log("我是beforeMount方法,我被执行了");
},
mounted(){
this.intervalId = setInterval(() =>{
console.log("=====");
this.isShow = !this.isShow;
}, 1000)
},
beforeUpdate() {
console.log("我是beforeUpdate方法,我被执行了");
},
updated() {
console.log("我是updated方法,我被执行了");
},
beforeDestroy() {
console.log("我是beforeDestroy方法,我要被销毁了");
clearInterval(this.intervalId)
},
destroyed() {
console.log("我是destroyed方法,我被执行了");
},
methods: {
destroyVm(){
this.$destroy();
}
}
})
</script>
</body>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KSH9TKyJ-1640183588851)(img/lifecycle.png)]
关于Vue更多
|