vue-router守卫

导航守卫 router.beforeEach 全局前置守卫

    • to: Route: 即将要进入的目标(路由对象)
    • from: Route: 当前导航正要离开的路由
    • next: Function: 一定要调用该方法来 resolve 这个钩子。(一定要用这个函数才能去到下一个路由,如果不用就拦截) 执行效果依赖 next 方法的调用参数。
    • next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。
    • next(false): 取消进入路由,url地址重置为from路由地址(也就是将要离开的路由地址)。
    •  1 // main.js 入口文件
       2     import router from './router'; // 引入路由
       3     router.beforeEach((to, from, next) => { 
       4       next();
       5     });
       6     router.beforeResolve((to, from, next) => {
       7       next();
       8     });
       9     router.afterEach((to, from) => {
      10       console.log('afterEach 全局后置钩子');
      11     });

      路由独享的守卫 你可以在路由配置上直接定义 beforeEnter 守卫

    •  1 const router = new VueRouter({
       2   routes: [
       3     {
       4       path: '/foo',
       5       component: Foo,
       6       beforeEnter: (to, from, next) => {
       7         // ...
       8       }
       9     }
      10   ]
      11 })

      组件内的守卫 你可以在路由组件内直接定义以下路由导航守卫

    •  1 const Foo = {
       2   template: `...`,
       3   beforeRouteEnter (to, from, next) {
       4     // 在渲染该组件的对应路由被 confirm 前调用
       5     // 不!能!获取组件实例 `this`
       6     // 因为当守卫执行前,组件实例还没被创建
       7   },
       8   beforeRouteUpdate (to, from, next) {
       9     // 在当前路由改变,但是该组件被复用时调用
      10     // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
      11     // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
      12     // 可以访问组件实例 `this`
      13   },
      14   beforeRouteLeave (to, from, next) {
      15     // 导航离开该组件的对应路由时调用,我们用它来禁止用户离开
      16     // 可以访问组件实例 `this`
      17     // 比如还未保存草稿,或者在用户离开前,
      18     将setInterval销毁,防止离开之后,定时器还在调用。
      19   }
      20 }

       

posted @ 2020-10-16 16:45  俩只猫  阅读(96)  评论(0编辑  收藏  举报