vue中路由守卫总结

目录

一、 什么是路由守卫?

二、 路由守卫三个参数

三、 路由守卫有哪些?

   1、全局前置守卫router.beforeEach

2、全局解析守卫        router.beforeResolve

3、全局后置钩子 router.afterEach(跳转后触发,没有next)

4、单个路由独享前置守卫beforeEnter

5、组件内守卫

四、 完整的导航解析流程


一、 什么是路由守卫?

在页面跳转时,提供拦截处理的功能。通常用于权限校验和登录判断等。

1. 根据作用范围的大小,分为全局守卫、路由独享的守卫和组件内的守卫
2. 根据作用顺序的前后,分为前置守卫、解析守卫、后置守卫等
3. 全局守卫:每次页面跳转都会触发,无论哪个页面都会触发.代码写在`路由的index.js`或者`main.js`中。

二、 路由守卫三个参数

1、to:即将要进入的目标路由对象
2、from:当前导航正要离开的路由
3、next:一定要调用该方法!不然页面一片白茫茫,这是中间件

三、 路由守卫有哪些?

   1、全局前置守卫router.beforeEach

(写在main.js或者router/index.js中)

 router.beforeEach((to, from, next)=> {
        // to:下一个页面的路由对象,即将进入的那个页面
        // from:当前页面的路由对象,正在离开的这个页面 
        document.title = to.meta.title;
        next();
      })

2、全局解析守卫        router.beforeResolve

和router.beforeEach类似,在导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后,解析守卫就被调用

  router.beforeResolve((to, from, next) => {
        console.log('===============');
        console.log(to);
        console.log(from);
        console.log('===============');
        next();
      })

3、全局后置钩子 router.afterEach(跳转后触发,没有next)

 router.afterEach((to, from) => {
        console.log('===============');
        console.log(to);
        console.log(from);
        console.log('===============');
      })

4、单个路由独享前置守卫beforeEnter

        路由独享前置守卫,参数的用法和全局前置守卫一样,只有这个路由切换时会触发,别的不管,放在在router/index.js的某一个路由中

 {
        path: '/xxx',
        name: 'xxx',
        component: xxx,
        beforeEnter: ((to, from, next) => {
          console.log('路由独享前置守卫===============');
          console.log(to);
          console.log(from);
          console.log('路由独享前置守卫===============');
          next();
        })
      }

5、组件内守卫

当要进入的url中包含这个组件时才会触发,别的不管


   beforeRouteEnter

 // 在某一个组件中,当成生命周期来写就行
        beforeRouteEnter (to, from, next) {
          // 在渲染该组件的对应路由被 confirm 前调用
          // 不!能!获取组件实例 `this`
          // 因为当守卫执行前,组件实例还没被创建
        },

beforeRouteUpdate

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

beforeRouteLeave

 beforeRouteLeave (to, from, next) {
          // 导航离开该组件的对应路由时调用
          // 可以访问组件实例 `this`
        }

四、 完整的导航解析流程

  • 导航被触发。
  • 在失活的组件里调用 beforeRouteLeave 守卫。
  • 调用全局的 beforeEach 守卫。
  • 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+)。
  • 在路由配置里调用 beforeEnter。
  • 解析异步路由组件。
  • 在被激活的组件里调用 beforeRouteEnter。
  • 调用全局的 beforeResolve 守卫 (2.5+)。
  • 导航被确认。
  • 调用全局的 afterEach 钩子。
  • 触发 DOM 更新。
  • 调用 beforeRouteEnter 守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入。
     

猜你喜欢

转载自blog.csdn.net/m0_64346035/article/details/125082330
今日推荐