vue实现路由权限 :router.beforeEach实现路由判断页面未登录跳转到登录页面(路由拦截)

前面的话

在页面发生路由改变时,比如做登录验证,只有验证登录之后才能进入主界面,未登录不能跳转。vue-router提供了导航钩子beforeEach和afterEach,它们会在路由将改变前和改变后触发。那么登录验证就应该在beforeEach钩子完成。

概述

beforeEach函数有三个参数:

  • to:router即将进入的路由对象 (这个对象中包含name,params,meta等属性)

  • from:当前导航即将离开的路由 (这个对象中包含name,params,meta等属性)

  • next:Function,进行管道中的一个钩子,如果执行完了,则导航的状态就是 confirmed (确认的);否则为false,终止导航。

    next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。

    next(false): 中断当前的导航。如果浏览器的 URL 改变了(可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。

    next(’/’) 或者 next({ path: ‘/’ }): 跳转到一个不同的地址。当前的导航被中断,然后 进行一个新的导航。

    next(error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError() 注册过的回调。

afterEach函数不用传next()函数

实例

在这里插入图片描述

router.beforeEach((to, from, next)=> {
// console.log("先判断是否登录");
// 如果是登录页则用next方法resolve掉这个钩子 
  if (to.name == 'Login') {
    next();
    return;
  }
// // 从store中读取是否获取了已登录的信息
  var name = store.state.user.name;
  if (name == '未登录') {
//  // 判断该路由是否需要登录权限
    if (to.meta.requireAuth || to.name == null) {
    // 把要跳转的地址作为参数传到下一步
      next({path: '/', query: {redirect: to.path}})
    } else {
      next();
    }
  }  
  }
}
)

我们在代码中做了一个判断 if (to.name === ‘Login’) ,也就是说当我们要跳转的路由对象是Login时候,才会进入导航守卫中判断条件,当我们点击其他链接跳转其他页正常。

store中的数据

state中保存着user的数据,只能读取,通过this.$store.commit()改变。
在这里插入图片描述

点击登录按钮绑定的方法

在这里插入图片描述
请求成功之后,改变store中user.name,并且跳转到主页面。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值