vue2.x导航卫士之beforeRouteEnter/beforeRouteUpdate/beforeRouteLeave

引:vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的。
全局的是在router对象上定义的守卫,比如:

const router = new VueRouter({ ... })

router.beforeEach((to, from, next) => {
  // ...
})

注意一定别忘了调用next()才能正常解析。
单个路由独享的,就是在针对个别路由定义的守卫,比如:

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

这些守卫与全局前置守卫的方法参数是一样的。
最后,详细介绍一下组件内守卫,因为这个不是那么直观地可以被理解,比如






beforeRouteEnter 守卫 不能 访问 this,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。所以在next()中定义了一个回掉,我们就可以访问组件内的属性方法了。
至于,后面两个守卫

beforeRouteUpdate (to, from, next) {
    // 在当前路由改变,但是该组件被复用时调用
    // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
    // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 `this`
    // 别忘了调用next
  },
  beforeRouteLeave (to, from, next) {
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 `this`
  }

上面的注释说的非常清晰,调用方法和beforRouteEnter是一样的

你可能感兴趣的:(vue2.x导航卫士之beforeRouteEnter/beforeRouteUpdate/beforeRouteLeave)