vue生命周期主要分为以下几个阶段:
- 数据初始化阶段
- dom挂载阶段
- 数据更新阶段
- 组件卸载阶段
- 开启组件缓存会有组件启用和组件停用阶段
以下做具体介绍
数据初始化阶段:
beforeCreated:例初始化之后,数据观测(data observer)和eventwatcher事件配置之前已被调用
created:实例已经创建完成后被调用【实例已完成以下配置:数据观测(data observer),属性和方法的运算,watch/event时间回调】,但是,挂载阶段还未开始,$el属性目前不可见
dom挂载阶段:
*beforeMount:*挂载开始之前被调用,相关的render函数首次被调用
mounted:el被新创建的vm.$el替换,并挂载到实例上去之后调用该钩子。如果root实例挂载了一个文档内元素,mounted被调用时vm.$el也在文档内
注:mounted不会承诺所有的子组件也都一起被挂载,如果希望等到整个视图都渲染完毕,可以使vm$nextTick替换掉mounted
数据更新阶段:.
beforeUpdate:数据更新时调用,发生在虚拟DOM重新渲染和打补丁之前
update:由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子
注:当这个钩子被调用时,组件DOM已更新,现在可以执行依赖于DOM的操作。大多数情况应该避免在此期间更改状态。若要相应状态改变,通常最好使用计算属性或watcher
注:updated不会承诺所有的子组件也都一起被重绘,如果希望等到整个视图都重绘完毕,可以用vm$nextTick替换掉update
组件卸载阶段
beforeDestroy:实例销毁之前调用,此时实例仍然可用
destroyed:VUE实例销毁之后调用,调用后,实例指示的所有东西都解绑,所有的事件监听器会被移除,所有子实例也会被销毁
缓存启用时:
activated:keep-alive组件激活时调用
deactivated:keep-alive组件停用时调用