每一个vue实例从创建到销毁的过程,就是这个vue实例的生命周期。在这个过程中,它经历了从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程。
?
?通过这张流程图已经可以清晰的看到Vue整个生命周期的过程
1.beforeCreate( 创建前 )
这个时候,在实例被完成创建出来,el和data都没有初始化,不能访问data、method,一般在这个阶段不进行操作。
2.created( 创建后 )
这个时候,vue实例中的data、method已被初始化,属性也被绑定,但此时还是虚拟dom,真实dom还没生成,$el 还不可用。这个时候可以调用data和method的数据及方法,createf钩子函数是最早可以调用data和method的,一般在此对数据进行初始化。
3.beforeMount( 挂载前)
此时模板已经编辑完成,但还没有被渲染至页面中(虚拟dom加载为真实dom),此时el存在则会显示el。在这里可以在渲染前进行最后一次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取。 当vue实例中,el为挂载目标,未对el进行定义,则this.el显示undefined,但页面中存在template也能识别挂载目标,因为template可以被看成占位符。如果对其进行定义则显示<div id="app"></div>,所以,beforeMount读取不了真实的el,在mounted才能读取到真实的el,因为el只有渲染完成后才会存在。这里讲的el是真实的el。在真实的el存在前,在beforeMount中的其实是页面中的#app,是挂载的目标。
??
?
?
4.beforeUpdate(更新前)
重新渲染之前触发,然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom利用diff算法进行对比之后重新渲染。只有view上面的数据变化才会触发beforeUpdate和updated,仅属于data中的数据改变不能触发。
5.updated(更新后)
数据已经更改完成,dom也重新render完成。
6.beforeDestroy(实例销毁前)
在这个函数内,还是可以操作实例的,但 之后会做一系列的销毁动作,解除各种数据引用,移除事件监听,删除组件_watcher,删除子实例,删除自身self等。同时将实例属性_isDestroyed置为true。
7.destroyed(实例销毁)
最后执行,实例被彻底销毁,Vue生命周期结束。
|