一、Vue生命周期
生命周期.png.png
- vue 生命周期有 创建、挂载、更新、销毁 四个阶段
- 创建前(beforeCreate):实例初始化之后,this指向创建的实例,不能访问到data、computed、watch、methods上的方法和数据。用于初始化非响应式变量
- 创建后(created):可访问data、computed、watch、methods上的方法和数据,未挂载到DOM,不能访问到refs属性内容为空。用于简单的ajax请求,页面的初始化
- 挂载前(beforeMount):编译模板为虚拟dom放入到render函数中准备渲染,然后执行beforeMount钩子函数,虚拟dom已经创建完成,马上就要渲染,在这里也可以更改数据,不会触发其他的钩子函数,一般可以在这里做初始数据的获取,可以访问 el(挂载根节点) 但是无法访问 refs(真实节点)
- 挂载后(mounted):组件已经出现在页面中,数据、真实dom都已经处理好了,事件都已经挂载好了,可以在这里操作真实dom等事情。用于获取数据后操作真实的DOM。
- 更新前(beforeUpdate):当组件或实例的数据更改之后,会立即执行beforeUpdate,然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染,一般不做什么事儿
- 更新后(updated):当更新完成后,执行updated,数据已经更改完成,dom也重新render完成,可以操作更新后的虚拟dom
- 销毁前(beforeDestroy): 当经过某种途径调用$destroy方法后,立即执行beforeDestroy,一般在这里做一些善后工作,例如清除计时器、清除非指令绑定的事件等等
- 销毁后(destroyed):组件的数据绑定、监听...去掉后只剩下dom空壳,这个时候,执行destroyed,在这里做善后工作也可以
二、keep-alive 钩子函数
- activated:keep-alive 组件激活时调用。
- deactivated:keep-alive 组件停用时调用。
注意:当引入keep-alive的时候,页面第一次进入,钩子的触发顺序created-> mounted-> activated,退出时触发deactivated。当再次进入(前进或者后退)时,只触发activated。
三、组件路由钩子函数
-
beforeRouteEnter(进入组件之前):不能访问 this,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。不过,你可以通过传一个回调给 next来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数。
beforeRouteEnter (to, from, next) {
next(vm => {
// 通过 `vm` 访问组件实例
})
}
-
beforeRouteUpdate(子路由切换时执行):
-
beforeRouteLeave(离开组件之前):通常用来提示用户在未保存某些修改而后退时的提示。该导航可以通过 next(false) 来取消。
beforeRouteLeave (to, from , next) {
if ('用户保存了') {
next()
} else {
next(false)
}
}
四、全局路由钩子函数
-
beforeEach(进入路由之前):权限控制,开启进度条
-
beforeResolve(路由确认时解析守卫):
-
beforeEach(进入路由之后):关闭进度条
网友评论