Vue-router

路由守卫,简单理解来说就是,当用户要进行一些操作时,我需要用户的一些信息或数据或行为,我判断过后,才会同意用户进行操作。

全局导航守卫

导航守卫主要用来监听路由的进入和离开,vue-router 提供了 beforeEach 和 afterEach 等钩子函数,它们会在路由即将改变前 及 改变后触发,以此来监听路由的变化。

beforeEach(全局前置守卫)

全局前置路由守卫,每次路由切换之前被调用,主要用来权限拦截操作。

router.beforeEach((to, from, next) => {
  if((to.path != '/login' || !to.meta.isAuth) && !checkToken() ) { // 需要登录的页面验证token不成功就需要跳到登录页面
    next('/login')
  } else {
    next(); // 如果是不需要登录的页面直接放行
  }
});
afterEach(全局后置守卫)

全局前置路由守卫,每次路由切换之后被调用,可用于切换document.title。

router.afterEach((to, from) => {
  if (to.path === '/home') {
    document.title = '首页';  //修改网页的title
  }
});

独享路由守卫

独享路由守卫只有前置没有后置

{
  path: '/qinghua',
  name: 'qinghua',
  component: Qinghua,
  beforeEnter: (to, from, next) => {
    if (localStorage.getItem('school') !== '清华大学') {
      alert('您无权限查看!');
    }
  }
}

组件内守卫

写在组件对象里。分别有前置守卫,后置守卫,路由改变守卫(当前组件被复用的情况,不是路径改变)三个钩子函数。独享路由守卫只有前置没有后置,直接写在.vue文件中。

  • beforeRouteEnter
  • beforeRouteUpdate
  • beforeRouteLeave
// 进入守卫,通过路由规则,进入该组件时被调用
beforeRouteEnter(to, from, next) {
  // ...
  console.log("enter");
  next();
},
// 离开守卫,通过路由规则,该组件更新时被调用
beforeRouteUpdate(to, from, next) {
  // ...
  console.log("leave");
  next();
},
// 离开守卫,通过路由规则,该组件离开时被调用
beforeRouteLeave(to, from, next) {
  // ...
  console.log("leave");
  next();
},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值