vue组件:全局前置导航守卫

222 阅读1分钟

导航守卫

作用:控制路由的访问权限

全局前置守卫

每次发生路由的导航跳转时,都会触发全局前置导航守卫
因此,程序员可以对每个路由进行访问权限的控制

//创建路由实例对象
const router = new VueRouter({...})
                              
//调用路由实例对象的beforeEach方法,即可声明"全局前置守卫"
//每次发生路由导航跳转的时候,都会自动触发fn这个函数
                              
router.beforEach(function(){})                              

守卫方法的3个形参

全局前置守卫的回调函数接收3个形参,格式为:

to 是将要访问的路由的信息对象
from 是将要离开的路由的信息对象
next 是一个函数,调用next(),表示放行,允许这次路由导航
//一律不放行
router.beforeEach((to,from,next)=>{
  
})

//无论什么情况,一律放行
router.beforeEach((to,from,next)=>{
  next()    
})

next函数的三种调用方式

导航守卫.png

代码实现

分析

  • 要拿到用户将要访问的hash地址
  • 判断hash地址是否等于/main

    • 不等于/main,无需登录,直接放行next()

    • 等于/main,证明需要登录才能访问,需要读取localStorage中的token值

      • 有token,放行
      • 无token,强制跳转到/login,登录页
router.beforeEach((to,from,next)=>{
    if(to.path === '/main'){
        const token = localStorage.getItem('token')
        if(token){
            next() //访问后台主页,且有token=>放行
        }else{
            next('/login') //无token,跳转到登录界面
        }
    }else{
        next() //访问的不是后台主页,直接放行
    }
})