Vue基础篇--生命周期函数

什么是Vue生命周期函数

每一个vue对象都有一个从 创建 -> 挂载 -> 更新 -> 移除 -> 销毁 的过程,这是vue对象的一个完整的生命周期。而Vue提供的生命周期函数,就是在这套执行过程中预留的一些函数钩子,这些钩子会在vue不同的时刻被触发,方便开发者在vue的各个时刻执行一些操作。

Vue的生命周期过程

下图是官网提供的vue实例的整个生命周期流程。红色矩形框标识了每个生命周期函数的具体的调用时刻。

 

定义生命周期函数

定义生命周期函数后,在实例运行过程中会自动调用这些函数。

所有生命周期函数中都可以直接调用this访问其属性。并且不能使用箭头函数语法定义生命周期函数方法,因为箭头函数会自动绑定父级的this指针,会造成原本的this指针被覆盖。

下面列出了所有的生命周期函数,实际业务中可根据实际需要定义

var vm = Vue({
    data:{}
    method:{}
      
    // 创建前后,
    beforeCreate(){},    // 实例初始化之后,配置数据监听和事件监听之前调用,所以this.data和this.methods属性都还未绑定
    created(){}          // 实例创建完成调用,此时内部数据监听,事件监听,计算属性,方法等均已经创建,但此时还没有挂载到document中。this.$el不可用。
    // 挂载前后
beforeMount(){} // 实例挂载到dom 树前执行 mounted(){} // 成功挂载实例后执行,this.$el可用。但是mounted只会保证自己被挂载了,不会保证子组件也被挂载了,如果需要载所有子组件都挂载时触发操作,使用this.$nextTick(function(){})绑定一个回调进行处理 // 数据更新前后 beforeUpdate(){} // 在数据发生改变后,DOM 被更新之前被调用 updated(){} // 数据改变导致页面内容更新动作完毕后,调用该函数。updated同样无法保证子组件更新,需要
使用this.$nextTick(function(){})绑定一个回调进行处理
    // 实例销毁前后
beforeDestory(){} // 调用 Vue.$destory()方法进行销毁前调用,此时该对象仍然可用 destoryed(){} // 对象被销毁后调用,该钩子方法调用后,所有指令被解绑,数据,时间监听器等都被移除 // 其他时刻触发 active: // 被 keep-alive 缓存的组件激活时调用。 deactiv: // 被 keep-alive 缓存的组件停用时调用。 errorCaptured:(err: Error, vm: Component, info: string) // 当捕获一个来自子孙组件的错误时调用,三个参数分别为 错误对象、发生错误的组件实例,错误描述字符串。 // 可以返回 false 以阻止该错误继续向上传播。 } })

vue的错误传播规则:

可以定义全局错误处理器 Vue.config.errorHandler = function (err, vm, info) {},所有没有被处理额错误都会被该错误处理器捕捉。

如果组件的继承链中有多个错误处理钩子,这些钩子将会被相同的错误逐个唤起。

错误处理函数中发生的错误会作为一个新错误,这个错误和原本捕捉的错误都会发送给全局的errorHandler

钩子函数可以返回false阻止错误继续向上传播,阻止后包括全局钩子在内的其他钩子都不会被这个错误唤起。

posted @ 2020-10-21 02:31  没有想象力  阅读(215)  评论(0编辑  收藏  举报