官方图示
可以看到钩子函数包含以下几种
- beforeCreate
- created
- beforeMount
- mounted
- beforeUpdate
- updated
- beforeDestroy
- destroyed
分析
在beforeCreate和created钩子函数之间的生命周期
在这个生命周期之间,进行初始化事件,进行数据的观测,可以看到在created的时候数据已经和data属性进行绑定(放在data中的属性当值发生改变的同时,视图也会改变)。
注意看下:此时还是没有el选项created钩子函数和beforeMount间的生命周期
首先会判断对象是否有el选项。如果有的话就继续向下编译,如果没有el选项,则停止编译,也就意味着停止了生命周期,直到在该vue实例上调用vm.$mount(el)。
这之后,观察到template参数选项对生命周期的影响
(1)如果vue实例对象中有template参数选项,则将其作为模板编译成render函数。
(2)如果没有template选项,则将外部HTML作为模板编译。
(3)template中的模板优先级要高于outer HTML的优先级。
(4)render函数选项的优先级最高。beforeMount和mounted 钩子函数间的生命周期
给vue实例对象添加$el成员,并且替换掉挂在的DOM元素。mounted
el已经渲染完成并挂载到实例上beforeUpdate钩子函数和updated钩子函数间的生命周期
当vue发现data中的数据发生了改变,会触发对应组件的重新渲染,先后调用beforeUpdate和updated钩子函数。beforeDestroy和destroyed钩子函数间的生命周期
beforeDestroy钩子函数在实例销毁之前调用。在这一步,实例仍然完全可用。
destroyed钩子函数在Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。
特殊的钩子函数
vue中可以使用keep-alive来包裹一个动态组件,这样可以保证失活的组件会被缓存,在下次渲染时,可以回到上次结束时的状态,这时拥有两个钩子函数
<keep-alive>
<component v-bind:is="currentTabComponent"></component>
</keep-alive>
- activated
当keep-alive组件激活时将会调用 - deactivated
当keep-alive组件停用时调用
注意:这两个钩子函数在服务器端渲染期间不被调用
v2.5.0版本新增钩子函数
- errorCaptured:(err: Error, vm: Component, info: string) => ?boolean
当捕获一个来自子孙组件的错误时被调用。这个猴子函数会收到三个参数错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回 false 以阻止该错误继续向上传播。
错误传播规则
默认情况下,如果全局的 config.errorHandler 被定义,所有的错误仍会发送它,因此这些错误仍然会向单一的分析服务的地方进行汇报。
如果一个组件的继承或父级从属链路中存在多个 errorCaptured 钩子,则它们将会被相同的错误逐个唤起。
如果此 errorCaptured 钩子自身抛出了一个错误,则这个新错误和原本被捕获的错误都会发送给全局的 config.errorHandler。
一个 errorCaptured 钩子能够返回 false 以阻止错误继续向上传播。本质上是说“这个错误已经被搞定了且应该被忽略”。它会阻止其它任何会被这个错误唤起的 errorCaptured 钩子和全局的 config.errorHandler。
参考资料:
(https://segmentfault.com/a/1190000011381906?utm_source=tag-newest)
(http://www.cnblogs.com/goloving/p/8616989.html)