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(视图层)的更新