vue-router路由守卫

170 阅读2分钟

  VUE的路由守卫机制 ## 有的时候,我们需要通过路由来进行一些权限的验证,比如说对于登录注册的使用,以及对于本地是否储存你所需要的账号密码进行一个验证,当用户满足条件时,你就可以根据你的需求进行跳转页面,反之,不行

  vue的路由守卫大致分为三类,一种是全局的,一种是局部的,还有一种是通过组件级别的

Vue-Router导航守卫:

  vue-router全局有三个守卫:

  1. router.beforeEach 全局前置守卫 进入路由之前

  2. router.beforeResolve 全局解析守卫(2.5.0+) 在beforeRouteEnter调用之后调用

  3. router.afterEach 全局后置钩子 进入路由之后

    // main.js 入口文件 import router from './router'; // 引入路由 router.beforeEach((to, from, next) => { next(); }); router.beforeResolve((to, from, next) => { next(); }); router.afterEach((to, from) => { console.log('afterEach 全局后置钩子'); });

to,from,next 这三个参数:

to和from是将要进入和将要离开的路由对象,路由对象指的是平时通过this.$route获取到的路由对象。

next:Function 这个参数是个函数,且必须调用,否则不能进入路由(页面空白)。

  • next() 进入该路由。
  • next(false): 取消进入路由,url地址重置为from路由地址(也就是将要离开的路由地址)。
  • next 跳转新路由,当前的导航被中断,重新开始一个新的导航。
    我们可以这样跳转:next('path地址')或者next({path:''})或者next({name:''})
    且允许设置诸如 replace: true、name: 'home' 之类的选项
    以及你用在router-link或router.push的对象选项。

路由独享守卫

如果你不想全局配置守卫的话,你可以为某些路由单独配置守卫:

    const router = new VueRouter({
      routes: [
        {
          path: '/foo',
          component: Foo,
          beforeEnter: (to, from, next) => { 
            // 参数用法什么的都一样,调用顺序在全局前置守卫后面,所以不会被全局守卫覆盖
            // ...
          }
        }
      ]
    })