Vue生命周期

130 阅读2分钟

new Vue() 实例化一个Vue

init events & lifecycle 初始化:事件、生命周期,但数据代理还未开始

beforeCreate 此时:无法通过vm访问到data中的数据、methods中的方法。

init injections & reactivity 初始化:数据监测、数据代理

created 此时:可以通过vm访问到data中的数据、methods中的方法

此阶段Vue开始解析模板,生成虚拟DOM(内存中),页面还不能显示解析好的内容 ↓

判断 has 'el' option? no --when vm.$mount(el) is called 执行这个函数 ----has 'template' option?
判断 has 'el' option? ----has 'template' option? yes --Compile template into render function ||no Compile el`s outerHTML as template

beforeMount 此时: 1.页面呈现的是未经Vue编译的DOM结构。

2.所有对DOM的操作,最终都不奏效。

3.模板已经在内存中被渲染好了,只是还没有挂载 到浏览器界面中去

create vm.$el and replace with it 将内存中的虚拟DOM转为真实DOM插入页面。

mounted:

此时:
1.页面中呈现的是经过Vue编译的DOM。
2.对DOM的操作均有效(尽量避免操作真实DOM)。至此,初始化过程结束,一般在此进行:开启定时器,ajax,事件。
3.进入运行阶段

运行阶段的声明周期函数只有两个

beforeUpdate 、updated 这两个事件,会根据data数据的变化执行0次或者多次。

when data changes

beforeUpdate

当执行beforeUpdate的时候,页面中显示的数据还是旧的,此时data数据是最新的,页面还没有和data保持同步

Vitual DOM re-render and patch

这一步执行的是:先根据data中的最新数据,在内存中重新渲染出一份最新的内存DOM树,当最新的内存DOM树更新之后,会重新渲染到真实的页面中去,这时候,就完成了数据从data(model)层 ===> view(视图层)的更新

Updated

执行Updated的时候,页面的数据已经是最新的,和data保持同步了。

when vm.$destroy() is called

beforeDestroy

当执行beforeDestroy钩子函数的时候,Vue实例就已经从运行阶段,进入到了销毁阶段。

当执行beforeDestroy的时候,实例身上所有的data和methods,以及过滤器,指令...... 都处于可用状态,此时,还没有真正执行销毁的过程

Teardown watchers,child components and event listeners

Destroyed

当执行到destroyed函数的时候,组件已经被完全销毁了,此时:组件中所有的数据、方法、指令、过滤器......都已经不可用了