Vue 路由导航守卫(全局守卫、路由独享守卫、组件内守卫)

什么是路由守卫?

路由守卫就是路由跳转的一些验证,比如登录鉴权(没有登录不能进入个人中心页)等等等。

路由守卫分为三大类:

  1. 全局守卫beforeEach

  2. 路由独享的守卫beforeEnter

  3. 组件内的守卫beforeRouteEnterbeforeRouteUpdatebeforeRouteLeave

每个守卫方法接收三个参数:

  • to: 要进入的目标路由(去哪儿)
  • from: 要离开的路由(从哪来)
  • next: 是否进行下一步(要不要继续)

next函数具体使用方法:
在这里插入图片描述

全局守卫

1.在路由的js文件导入VUE路由对象并挂载

import Router from 'vue-router'

Vue.use(Router)

2.创建路由实例

给需要守卫的路由加上: meta: { permission: true },

const router = new Router({
  routes: [
    { path: '/', redirect: '/login' },
    { path: '/login', component: Login },
    { path: '/home', component: Home,meta: { permission: true }}
  ]
})

3.挂载路由导航守卫

// 挂载路由导航守卫
router.beforeEach((to, from, next) => {
  if (to.meta.permission) {
    if (sessionStorage.getItem("token")) {
      next();
    } else {
      alert("请先登录");
      next("/login");
    }
  } else {
    next();
  }
});

4.导出路由

export default router

单个路由守卫

你可以在路由配置上直接定义 beforeEnter 守卫:

const router = new Router({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
		if (sessionStorage.getItem("token")) {
			next();
		} else {
			alert("请先登录");
			next("/login");
		}
      }
    }
  ]
})

这些守卫与全局前置守卫的方法参数是一样的。

组件内部守卫

在组件内部使用,和data、created、mounted、methods处于平等关系

用beforeRouteEnter举例说明:

  beforeRouteEnter(to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不!能!获取组件实例 `this`
    // 因为当守卫执行前,组件实例还没被创建
    if (sessionStorage.getItem("token")) {
      next();
    } else {
      alert("请先登录");
      next("/login");
    }
  },

参考

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值