vue如何使用路由导航守卫

本文详细介绍了在router/index.js中如何使用路由导航守卫进行页面跳转控制及Token验证,确保用户在未登录状态下无法访问受保护的页面。

在router/index.js中定义路由导航守卫

// 挂载路由导航守卫
router.beforeEach((to, from, next) => {
  // to 将要访问的路径
  // from 从哪个路径跳转来的
  // next 是一个函数,表示放行
  // 判断是否存在token,如果不存在强制跳转到login页面
  if (to.path === '/login') return next()
  // 获取token
  const tokenStr = window.sessionStorage.getItem('token')
  if (!tokenStr) return next('/login')
  // 存在就放行
  next()
})

退出按钮清除sessionStorage中的token值

logout () {
      // 清除sessionStorage中的token值
      window.sessionStorage.clear()
      // 返回到login
      this.$router.push('/login')
    }
  }
Vue3 的路由导航守卫Vue2 的路由导航守卫使用方法基本一致,但是在 Vue3 中使用守卫需要注意一些细节。 1. 全局守卫 在创建路由实例时,可以通过 `beforeEach`、`beforeResolve`、`afterEach` 方法来定义全局的路由导航守卫。 ```javascript import { createRouter, createWebHistory } from 'vue-router' const routerHistory = createWebHistory() const router = createRouter({ history: routerHistory, routes: [ // ... ] }) router.beforeEach((to, from, next) => { // 在进入路由前做一些处理 next() }) router.afterEach(() => { // 在路由完成后做一些处理 }) export default router ``` 2. 路由独享守卫 在定义路由时,可以通过 `beforeEnter` 方法来定义该路由的独享守卫。 ```javascript const routes = [ { path: '/foo', component: Foo, beforeEnter: (to, from, next) => { // 在进入该路由前做一些处理 next() } }, // ... ] ``` 3. 组件内守卫 在组件内,可以通过 `beforeRouteEnter`、`beforeRouteUpdate`、`beforeRouteLeave` 方法来定义组件内的路由导航守卫。 ```javascript export default { // 在组件进入路由前做一些处理 beforeRouteEnter(to, from, next) { // 在组件未创建前,this 指向的是 undefined,因此无法访问组件实例。 // 可以通过回调函数来访问组件实例。 next(vm => { // 可以通过 vm 访问组件实例 }) }, // 在组件更新路由前做一些处理 beforeRouteUpdate(to, from, next) { // 可以通过 this 访问组件实例 // 在组件更新时,组件实例已经存在,因此可以直接访问组件实例 next() }, // 在组件离开路由前做一些处理 beforeRouteLeave(to, from, next) { // 可以通过 this 访问组件实例 // 在组件离开路由时,组件实例仍然存在,因此可以直接访问组件实例 next() } } ``` 注意事项: 1. 在 `beforeRouteEnter` 中,访问不到组件实例,需要通过回调函数来访问组件实例。 2. 在 `beforeRouteUpdate` 和 `beforeRouteLeave` 中,可以直接通过 `this` 访问组件实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值