vue3 动态路由刷新

1.在路由守卫中 添加 需要判断 if(router.hasRoute(to))
router.beforeEach(async(to, from, next) => {
  // 开启进度条
  NProgress.start()
  // 判断是否有token
  const token = store.getters.token
  if (token) {
    // 判断是否去登录页
    if (to.path === '/login') {
      next('/')
      // 关闭进度条
      NProgress.done()
    } else {
      /**、8.、
        去到所有页面之前都会走这里
        先判断有没有用户信息
        有,直接放行
        没有,先获取到用户信息再放行
      */

      // 获取用户信息
      if (!store.getters.userId) {
        // 获取用户的权限点
        const { roles } = await store.dispatch('user/getUserInfo')
        // 从动态路由数组中筛选出动态路由
        const filterRoutes = asyncRoutes.filter(item => {
          return roles.menus.includes(item.name)
        })
        store.commit('user/setRoutes', filterRoutes)
        /**
          问题1:addRoutes方法存在已知缺陷,官方给的解决方案是:重新再进一次 next(to.path)
          问题2:{ path: '*', redirect: '/404', hidden: true } 必须放在路由规则数组的最后
        */
        if(router.hasRoute(to)){
            next()
        }else {
         router.addRoute
        next(to)
        }
       
      } else {
        next()
      }
    }
  } else {
    // 判断是否在白名单
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
      // 关闭进度条
      NProgress.done()
    }
  }
})

1.在路由守卫中 添加 需要判断 if(router.hasRoute(to))
router.beforeEach((to, from, next) => {
  NProgress.start()
  document.title = `${to.meta.title}`
  const token = localStorage.getItem("oo")
  let roles = ["common"]
  if (!token && to.path !== '/login') {
    next('/login')
  } else {
    if (router.hasRoute(to)) {//判断动态路由表的长度是否为0
      next()
    } else {
      resRoute = handelRoutes(permissionRoutes[0].children, roles)
      resRoute.forEach(route => {
        router.addRoute(route)
      })
      router.addRoute({//向动态路由添加404页面
        path: '/404',
        name: '404',
        component: () => import( /* webpackChunkName: "404" */ '../views/404.vue'),
        meta: {
          title: '路径错误'
        }
      })
      router.addRoute({
        // path: "*", // 这样用,vue3已经不支持,得下面的方式
        path: "/:pathMath(.*)", // 此处需特别注意置于最底部
        redirect: "/404"
      })
      // 如果 addRoute 并未完成,路由守卫会一层一层的执行执行,直到 addRoute 完成,找到对应的路由
      next({
        ...to,
        replace: true
      })
    }
  }

第二种  在main.ts中进行路由添加  注意 要在app.use(router)前面  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值