用了很久的vue,可是生命周期钩子基本上只用mounted
一个;今天翻阅文档,发现最新的Vue(v2.6.10)彷佛与之前不同了(*/ω\*),再复习一遍这些知识。javascript
全部的生命周期钩子自动绑定
this
上下文到实例中,所以你能够访问数据,对属性和方法进行运算。
这意味着你不能使用箭头函数来定义一个生命周期方法,这是由于箭头函数绑定了父上下文,所以this
与你期待的Vue实例不一样。html
在实例初始化以后,数据观测(data observer)和event/watcher事件配置以前被调用。vue
在实例建立完成后被当即调用。在这一步,实例已完成如下的配置:数据观测(data observer),属性和方法的运算,watch/event事件回调。然而,挂载阶段还没开始,$el
属性目前不可见。java
在挂载开始以前被调用:相关的render
函数首次被调用。git
该钩子在服务器端渲染期间不被调用。github
el
被新建立的vm.$el
替换,并挂载到实例上去以后,调用该钩子。若是root实例挂载了一个文档内元素,当mounted
被调用时vm.$el
也在文档内。服务器
该钩子在服务器端渲染期间不被调用。app
注意mounted
不会承诺全部子组件也都被一块儿挂载。若是你但愿等到整个视图都渲染完毕,能够使用vm.$nextTick
:函数
mounted() { this.$nextTick(() => { // TODO }); }
数据更新时调用,发生在虚拟DOM打补丁以前。这里适合在更新以前访问现有DOM。好比手动移除已添加的事件监听器。this
该钩子在服务器端渲染期间不被调用,由于只有初次渲染会在服务端进行。
因为数据更改致使的虚拟DOM从新渲染和打补丁,在这以后会调用该钩子。
当这个钩子被调用时,组件DOM已经更新,因此你如今能够执行依赖于DOM的操做。然而在大多数状况下,你应该避免在此期间更改状态。若是要相应状态改变,一般最好使用计算属性或watcher取而代之。
注意updated
不会承诺全部子组件也都被一块儿重绘。若是你但愿等到整个视图都重绘完毕,能够使用vm.$nextTick
。
该钩子在服务器端渲染期间不被调用。
keep-alive组件激活时调用。
该钩子在服务器端渲染期间不被调用。
keep-alive组件停用时调用。
该钩子在服务器端渲染期间不被调用。
实例销毁以前调用。在这一步,实例仍然彻底可用。
该钩子在服务器端渲染期间不被调用。
Vue实例销毁后调用。调用后,Vue实例指示的全部东西都会解绑定,全部的事件监听器会被移除,全部的子实例也会被销毁。
该钩子在服务器端渲染期间不被调用。
2.5.0+新增
(err: Error, vm: Component, info: string) => ?boolean
当捕获一个来自子孙组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子能够返回
false
以组织该错误继续向上传播。
能够在此钩子中修改组件的状态。所以在模板或渲染函数中设置其它内容的短路条件很是重要 ,它能够防止当一个错误被捕获时该组件进入一个无限的渲染循环。
当errorCaptured
被触发:
Vue.component('button-counter', { template: '<button @click="increment">{{ counter }}</button>', data: function () { return { counter: 0 } }, watch: { counter(v) { if (v % 2 !== 0) throw new Error('OMG!!!!'); } }, methods: { increment: function () { const step = 1; this.counter += step; this.$emit('increment', { count: step }); } } });
new Vue({ el: '#app', data() { return { total: 0, isShow: true } }, methods: { incrementTotal: function (data) { this.total += data.count; } }, errorCaptured(err, vm, info) { console.warn('errorCaptured'); console.log(err); console.log(vm); console.log(info); console.log(this); } });
当按钮计数值不能被2整除时触发错误:
config.errorHandler
被定义,全部的错误仍会发送它,所以这些错误仍然会向单一的分析服务的地方进行汇报。errorCaptured
钩子,则它们将会被相同的错误逐个唤起。errorCaptured
钩子自身抛出了一个错误,则这个新错误和本来被捕获的错误都会发送给全局的`config.errorHandler
。errorCaptured
钩子可以返回false
以阻止错误继续向上传播。本质上是说“这个错误已经被搞定了且应该被忽略”。它会阻止其余任何会被这个错误唤起的errorCaptured
钩子和全局的config.errorHandler
。The end... Last updated by: Jehorn, April 22, 2019, 10:33 AM
demo源码