Vue生命周期 具体执行流程请看文章末尾
阶段一 创建期
beforeCreate 执行之前初始化事件以及生命周期
Vue实例在内存中刚被创建,数据对象(data)和方法(methods)未初始化;
- 在这个钩子函数中,不能获取data中的数据
- 这个函数不能操作DOM
created 进行数据监听
实例已经在内存中创建好,数据和方法已经初始化完成,但是模板还未编译,页面还是没有内容;(此时访问this.$el 和this.$refs.xxx 都是 undefined)
- 在created发送请求
- 可以获取到data中的数据
- 不能操作DOM
beforeMount 执行之前
找到对应的template模板,编译成render函数,转换成虚拟dom,此时模板已经编译完成,数据未挂载到页面 ,也就是说在这个阶段你可以看到标签间的双花括号,数据还未渲染到页面中;
补充:
render : h=>h(App)
在beforeMounte之后和mounted之前,还有渲染render函数,它的作用是把模板渲染成虚拟dom
mounted 挂载完毕
模板编译好了,虚拟dom渲染成真正的dom标签,数据渲染到页面,此时Vue实例已经创建完毕,如果没有其他操作的话,Vue实例也没有操作。一般会在mounted中来渲染从后端获取的数据!(页面初始化时,如果有操作dom的事件一般也会放在mounted钩子函数中,当然,你也 可以放在create中,前提需使用this.$nextTick(function(){}),在回调函数中操作dom。)
--debugger-- 挂载: 把VUE实例生成的虚拟的DOM转成真实的DOM,放在了页面中,这就是挂载; // 编译出的DOM把原有的DOM替换完毕; // 可以获取最终的DOM元素
阶段二 实例期
beforeUpdate 更新数据之前执行
当数据更新时,会调用beforeUpdate 和updated钩子函数;上面四个不再运行 更新数据之前执行
updated 更新数据之后执行
数据更新,虚拟的DOM更新,然后更新真实的DOM;最后触发这个函数
阶段三 销毁期
beforeDestroy 销毁之前
- 销毁之前
- 清除定时器
destroyed 销毁之后
- 销毁子组件,销毁观察者,事件监听者
- 元素的事件还在,但是更改数据不会再让视图进行更新了
| 钩子函数 | 触发的行为 | 在此阶段可以做的事 |
|---|---|---|
| beforeCreadte | vue实例的挂载元素$el和数据对象data都为undefined,还未初始化。 | 加loading事件 |
| created | vue实例的数据对象data有了,$el还没有 | 结束loading、请求数据为mounted渲染做准备 |
| beforeMount | vue实例的$el和data都初始化了,但还是虚拟的dom节点,具体的data.filter还未替换。 | |
| mounted | vue实例挂载完成,data.filter成功渲染 | 配合路由钩子使用 |
| beforeUpdate | data更新前触发 | |
| updated | data更新时触发 | 数据更新时,做一些处理(此处也可以用watch进行观测) |
| beforeDestroy | 组件销毁时触发 | |
| destroyed | 组件销毁时触发,vue实例解除了事件监听以及和dom的绑定(无响应了),但DOM节点依旧存在 | 组件销毁时进行提示 |
大图警告!!!! 大图警告!!!! 大图警告!!!!
大图警告!!!! 大图警告!!!! 大图警告!!!!
大图警告!!!! 大图警告!!!! 大图警告!!!!