Vue路由钩子和Vue生命周期

路由钩子作用是拦截导航,完成跳转或者取消跳转

Vue路由三种方式

  1. 全局路由
    路由跳转前(全局前置守卫):router.beforeEach((to, from, next) => {...})beforeEach需要调用next(),如next(false)是中断当前导航;
    路由跳转后(全局后置钩子):router.afterEach((to, from) => {...})afterEach没有next方法,不能改变导航
    v 2.5.0+新增了一个钩子router.beforeResolve((to, from, next) => {...})(全局解析守卫),在导航被确认前,且组件内守卫和异步路由组件解析完成之后调用;
  2. 路由独享
    配置路由时添加beforeEnter方法
var routes = [
  {
     path: '/foo',
     name: 'foo',
     component: Foo,
     beforeEnter: (to, from, next) =>{
       next()
     }
  }
]
  1. 路由组件钩子
    (1)beforeRouterEnter(to, from, next)渲染组件对应路由被confirm前调用;获取不到组件实例的this;在组件beforeCreated之前调用;
    (2)beforeRouterUpdate(to, from, next)当前路由改变,但组件复用时调用,如在/foo/1/foo/2之间切换,会渲染同样的Foo组件;可以访问到组件实例的this;点击更新二级导航时调用;
    (3)beforeRouterLeave(to, from, next)导航离开该组件对应路由时调用;可以访问到组件实例的this;离开当前页面之前调用;

每个组件都是独立的。创建、数据初始化、挂载、更新、销毁,是一个组件整个生命周期。

Vue生命周期

new Vue()构造函数生成Vue实例之后,

  1. beforeCreate
    this指向创建的实例 ,数据observer和事件尚未配置,访问不到methods data computed watch中的方法和数据;
  2. created
    可以调用methods 方法,修改data 数据,并且可触发响应式变化等。但未挂载到DOM,访问不了$el属性,$ref属性内容为空;
    使用场景:ajax请求获取初始化数据对实例进行初始化预处理等操作。created生命周期之后是无法对挂载实例进行拦截的,如果需要某些数据获取完成才能进入页面,可以在beforeRouteEnter中补充逻辑;
  3. beforeMount
    查看实例中有无$el属性,没有需要等待vm.$mount(el)调用,之后会找到相应的template,并编译成相应的render()函数;
  4. mounted
    $el(虚拟)替换成真正的dom,挂载完成,dom树已经完成渲染到页面。即可以通过DOM API获取DOM节点,$ref属性也可以访问;
    但在这个阶段改变data的值,相关computed属性会立刻更新;但需要进入到下一次DOM更新才能看到数据变化;
  5. beforeUpdate
    beforeUpdate更新的对象是模板,如果发生变化的数据并没有在template中使用,则不会触发该方法;
  6. updated
    数据变更导致虚拟DOM重新渲染之后会调用该方法;
  7. beforeDestroy
    实例销毁之前调用,仍能访问到this
  8. destroyed
    Vue实例销毁后调用,包括子实例;

生命周期流程图:
在这里插入图片描述

Vue.js

代码第4629行初始化vm实例的各种参数
顺序:props -> methods -> data ->computed -> watch

理解路由钩子和Vue组件生命周期:

  1. 触发导航行为,此时导航是未confirm状态
  2. 失活的组件调用beforeRouteLeave
  3. 调用全局前置守卫beforeEach
  4. 重用的组件里调用beforeRouteUpdate
  5. 路由配置里调用beforeEnter
  6. 解析异步路由;
  7. 激活的组件里调用beforeRouterEnter
  8. 调用全局解析守卫beforeResolve
  9. 导航确认;
  10. 调用全局后置钩子afterEach
  11. 新创建的组件开始生命周期;
  12. beforeCreatcreated
  13. beforeMountmounted
  14. 触发DOM更新;
  15. 导航完成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值