封装路由守卫解决vuex刷新丢失问题

注意js文件引入的是router,而不是useRouter实例化的对象

在前置守卫开启进度条加载,并且获取用户信息,确保刷新不糊丢失vuex数据

在后置守卫关闭进度条

import router from '../router'
import { getToken } from './auth';
import store from '../store';
import { toast, showLoading, hideLoading } from '../composables/utils'
import { removeToken } from '../composables/auth'
router.beforeEach(async (to, from, next) => {
  // console.log(to.meta.name);
  document.title = to.meta.name
  showLoading()//进度条
  const token = getToken()//获取token
  // 返回 false 以取消导航
  // console.log(to);
  if (!token && to.path != '/login') {
    toast('登录先!', 'error')
    return next({
      path: '/login'
    })
  }
  //防止重复登录
  if (token && to.path == '/login') {
    toast('不准重复登录!', 'error')
    return next({
      path: from.path
    })
  }
  // 如果通过了, 那就解决vuex问题
  if (token) {
    try {
      let f = await store.dispatch('getUserInfo')
      if (f == 'fail') {
        removeToken()
        return next({
          path: '/login'
        })
      }
    } catch (error) {
    }
  }  
  next()
})
router.afterEach((to, from) => {
  hideLoading()
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了封装Vue3的路由守卫,你可以按照以下步骤进行操作: 1. 在Vue3项目中引入Vue-router4.0版本。 2. 创建一个新的文件,例如"router.js",用于存放路由相关的代码。 3. 在"router.js"中,使用`createRouter`函数创建一个新的路由实例。 4. 在创建路由实例的过程中,可以定义全局的前置路由守卫和后置路由守卫。可以通过`beforeEach`方法定义前置路由守卫,通过`afterEach`方法定义后置路由守卫。 5. 在前置路由守卫中,可以进行一些验证或权限控制的操作,例如检查用户是否已登录,是否有权限访问某个页面等。 6. 在后置路由守卫中,可以进行一些页面切换后的操作,例如记录页面的访问记录、统计页面的访问量等。 7. 将创建的路由实例导出,在主文件中引入并挂载到Vue实例中。 总结一下,封装Vue3的路由守卫的步骤如下: 1. 引入Vue-router4.0版本。 2. 创建一个新的文件,例如"router.js"。 3. 在"router.js"中创建路由实例,并定义全局的前置路由守卫和后置路由守卫。 4. 导出路由实例。 5. 在主文件中引入并挂载路由实例到Vue实例中。 希望这些步骤可以帮助你封装Vue3的路由守卫。请注意,上述步骤仅供参考,具体的实现方法可能会根据你的项目需求有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [使用Vue3.0+Element-plus+Vue-router4.0(并对利用导航守卫对路由进行二次封装)搭建后台管理系统项目](https://blog.csdn.net/weixin_43742274/article/details/114701007)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值