Vue实例在什么周期中各阶段属性和触发事件总结:
涉及到的生命周期钩子(lifecycle hooks): beforeCreate
,created
,mounted
,beforeUpdate
,updated
,activated
,deactivated
,beforeDestroy
,destroyed
.
实例方法: vm.$mount
,vm.$forceUpdate
,vm.nextTick
,vm.$destroy
.
实例选项:data
,computed
,methods
,watch
,props
,propsData
,el
,template
,render
,renderError
.
-
调用
new Vue()
生成- 在初始化实例之后,在设置数据监控,事件/watch 之前,触发
beforeCreate
,在这个状态,实例的选项(options)没有设置完成,因此不能使用实例(组件)中的方法(methods)和数据(data)。主要作用,预设实例需要的一些数据初始值等。 - 完成实例的选项处理后,触发
created
,在这个状态,$el
<u>属性仍然不可用</u>。
- 在初始化实例之后,在设置数据监控,事件/watch 之前,触发
-
DOM节点挂载
挂载节点时机分两种情况:
- 实例中有
el
选项,在完成实例生成后开始挂载。 - 实例中没有
el
选项,在调用vm.$mount(el)
时挂载。
开始挂载后,选择模版分两种情况:
实例中有
template
选项,编译template
中的内容到render
中。-
实例中没有
template
选项,则获取el
选线的outHTML
属性作为template
。 注释:
el.outHTML
与el.innerHTML
的区别:outHTML
包括el
自身
完成模版编译后,触发
beforeMount
,之后,创建DOM节点vm.$el
并且替换el
节点。然后出发mounted
,Vue Dom节点挂载完成的。 - 实例中有
-
更新(update),激活(activate)
更新数据,在date 修改后,触发
beforeUpdate
,重新编译virtual DOM,并且显示到页面上,然后触发updated
。-
activated
与deactivated
只有
keep-live
虚拟组件中的实例会触发,即<keep-live> <component/> //激活时会触发activated,无效时会触发deactivated. </keep-live>
keep-live
作用:缓存标签内的实例,控制实例显示隐藏时,不需要再次生成实例,对需要频繁切换的实例可以提高性能。如果父组件不在
keep-live
标签内,父组件隐藏时,缓存会清除,会触发deactivated
-
vm.$destroy()
调用
vm.$destroy()
方法后,触发beforeDestroy
,然后断开数据监控,完成后触发destroyed
。注释:调用
$destroy
后,修改实例数据,页面显示不会发生变化,但是实例中元素绑定的事件能正常执行。 如果父组件被销毁,子组件也会被销毁,
keep-live
缓存的实例会失效。 使用
<component :is="view"/>
标签时,is
属性改变,原有的实例会被销毁。
附图(来自Vue官网)
*vue官方链接:http://vuejs.org/ *