版本:vue2.X、ant design vue 1.7.8
答:vue的生命周期就是一个组件从创建开始的初始化、挂载、更新等步骤后,最后被卸载的过程;
相当于现实生活中拼图游戏,
先在初始化阶段准备拼图的图板、零散的拼图;
在挂载的阶段把拼图一个一个的拼凑成目标的图案;
在更新阶段相当于把拼图里有部分拼凑错图的扣出来或额外diy新的图放到需要放的地方;
在卸载阶段相当于把拼凑好的拼图欣赏完后再拆散收起来的过程
挂载阶段:
beforeCreate //数据检测和数据代理的创建之前
created //数据检测和数据代理的创建创建完毕
beforeMount //挂载之前
mounted //挂载完毕
更新阶段:
beforeUpdate //更新之前
update //更新完毕
卸载(销毁)阶段:
beforeDestroy //卸载之前
destroyed //卸载完毕
按官方文档的示例图解
在页面实践,代码如下
控制台的截图,打印顺序如下:
可以看到beforeCreate
是最先的,并且在此时的状态下,打印的信息什么都拿不到。
然后进入了created
状态,在这个状态中我们的el,也就是Dom元素依旧是拿不到的,但是我们已经可以拿到data了,这意味着 created已经将数据加载进来了 ,已经为这个Vue实例开辟了内存空间。
beforeMount
挂载前状态,在我的理解挂载就是将虚拟Dom转变成真实Dom的过程,所以在这之前,我们的el当然还是拿不到的。
mounted
挂载结束,意味着虚拟Dom已经挂载在了真实的元素上,所以从此开始我们就可以拿到el了。我们可以用console.dir去打印一些我们需要的元素的属性。
至此,我们的挂载阶段就结束了。
然后在更新阶段,在vue页面新增如下代码
{{ message }}
然后我们在input输入框输入更改message数据,截图如下
每当我们去改变页面元素的时候,就会进入更新阶段,也就是beforeUpdate,updated这两个状态。
然后在卸载阶段,在vue页面新增如下代码
//在template代码块增加如下按钮点击卸载 //在script增加一个方法methods: {showtap() {this.$destroy('home')},},
截图如下:
beforeDestroy
销毁前状态,在销毁之前,所以我们的元素、data都是如同挂载之后的阶段一样,都是可以打印出来的。
destroyed
销毁完成的状态也是什么都可以打印出来
beforeDestroy
和destroyed
,都是我们离开这个组件才会被调用的生命周期。
生命周期:
又名:生命周期回调函数、生命周期函数、生命周期钩子。
是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数。
生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。
生命周期函数中的this指向是vm 或 组件实例对象。
常用的生命周期钩子:mounted: 发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】。
beforeDestroy:清除定时器、解绑自定义事件、取消订阅消息等【收尾工作】。
关于销毁Vue实例
销毁后借助Vue开发者工具看不到任何信息。
销毁后自定义事件会失效,但原生DOM事件依然有效。
一般不会在beforeDestroy操作数据,因为即便操作数据,也不会再触发更新流程了。
官网:https://cn.vuejs.org/api/options-lifecycle.html#beforecreate