Vue-Router 的钩子函数都有哪些?

362 阅读2分钟

关于 Vue-Router 中的钩子函数主要分为 3 类

一、全局钩子函数要包含 beforeEach afterEach

 beforeEach 函数有三个参数,分别是:

 to:router 即将进入的路由对象

 from:当前导航即将离开的路由

 next:function,进行管道中的一个钩子,如果执行完了,则导航的状态就是 confirmed (确认的)
 否则为 false,终止导航。
 
 afterEach函数不用传next()函数
 

应用场景 进入页面登录判断、管理员权限判断、浏览器判断

`router.beforeEach((to, from, next) => {
    if (to.meta.requireAuth) {
        //判断该路由是否需要登录权限
        if (cookies('token')) {
            //通过封装好的cookies读取token,如果存在,name接下一步如果不存在,那跳转回登录页
            next()//不要在next里面加"path:/",会陷入死循环
        }
        else {
            next({
                path: '/login',
                query: {redirect: to.fullPath}//将跳转的路由path作为参数,登录成功后跳转到该路由
            })
        }
    }
    else {
        next()
    }
})`
 

二、单独路由独享组件

 beforeEnter,
 
 主要用于写某个指定路由跳转时需要执行的逻辑

 const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]

三、组件内钩子总共有三个

  beforeRouterEnter,

  beforeRouterUpdate,

  beforeRouterLeave
  
  这几个钩子都是写在组件里面也可以传三个参数(to,from,next),作用与前面类似.
  
 const Foo = {
  template: `...`,
  beforeRouteEnter (to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不!能!获取组件实例 `this`
    // 因为当钩子执行前,组件实例还没被创建
  },
  beforeRouteUpdate (to, from, next) {
    // 在当前路由改变,但是该组件被复用时调用
    // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
    // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 `this`
  },
  beforeRouteLeave (to, from, next) {
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 `this`
  }