下图是官方发布的生命周期函数图,接下来将从三个步骤对生命周期函数进行讲解。

当我们new Vue() 过后,Vue就会自动帮我们进行初始化操作。
但是这个时候的初始化只对Vue中的声明周期函数、事件等进行初始化,并未进行数据代理。
也就是我们在beforeCreate() 生命周期函数中无法通过vm访问到data中的数据和methods中的方法。


beforeCreated生命周期函数调用完以后就接着进行初始化。
下一步就是对数据监视和数据代理进行初始化。
也就是我们在created() 生命周期函数中可以通过vm访问到data中的数据和methods中配置的方法。


在Vue对于数据的初始化完成过后就开始解析模板,在内存中生成虚拟DOM。
此时的页面还不能显示解析好的内容,呈现的是未经Vue编译的DOM结构。
所有对于DOM的操作,最终都不奏效。


虚拟DOM生成后,将虚拟DOM转化为真实DOM插入页面。
此时的页面中呈现的是经过Vue编译后的DOM。
并且对于DOM的操作均有效,但是要尽可能避免在这个时候操作DOM。


至此初始化过程结束,一般在此时开启定时器、发送网络请求、订阅消息、绑定自定义事件、等初始化操作。
当data中的数据改变,就会进行更新流程。
此时数据是新的,但是页面还是旧的。
也就是说:页面和数据还未保持同步。


Vue根据新的数据生成新的虚拟DOM,随后与旧的虚拟DOM进行比较,最终完成页面的更新。
也就是完成了Model -> View的更新。
此时的数据和页面都是新的,也就是数据和页面保持同步。


只有Vue实例对象才会进入销毁流程。
销毁vm的方法如下:
vm.$destroy();
在这个生命周期中,vm中所有的data,methods,指令等都处于可用状态(数据会改变,但是不会再进行页面渲染),马上就要执行销毁流程。
一般在此阶段关闭定时器、取消订阅消息、解绑自定义事件等收尾操作。


在这一阶段Vue实例对象已经被销毁了,但是数据还残留在页面上,一般不会使用该生命函数进行操作。
所有的生命周期函数中的this都是指向Vue实例对象!