vue动态路由刷新失效以及404页面处理办法

 更新时间:2023年11月21日 09:56:45   作者:Gao_web  
作为一个前端新手,项目中遇到权限处理时,通常会采用动态添加路由的方法来实现,下面这篇文章主要给大家介绍了关于vue动态路由刷新失效以及404页面处理办法的相关资料,需要的朋友可以参考下

前言

在开发后台管理项目,我们会使用vue动态路由做权限管理,但是使用vue动态路由时会遇到一些坑,这里总结一下,并提供解决思路

1.动态路由刷新页面失效问题

问题:刷新页面时会把addRouter添加的动态路由刷新掉,因此浏览器找不到之前添加的路由,便会进入白屏页面或者404页面

处理方式:判断是否刷新页面  如果刷新在路由守卫中再次添加动态路由

把添加的动态路由存入浏览器缓存和vuex或pinia中 如果刷新页面vuex和pinia存的内容将会丢失以此来判断是否刷新页面 然后从浏览器缓存中拿到再重新添加

router.beforeEach((to, from, next) => {
    if(store.userRouter.length || to.path == '/' || to.path == '/index'){
           next() //如果登录页或首页 或 vuex中有动态路由数据 直接通过
    }else{
          //拿到浏览器缓存中动态路由的数据 重新添加
          const data = JSON.parse( localStorage.getItem('userRouter'))
          store.userRouter = data     //重新复制给store
          data.forEach(e=>{        //循环添加路由
          router.addRoute(e) 
          }) 
           
          next(to.path)  //添加完成后再次进入
 
    }
})

注意使用pinia在router配置文件中访问不到store,建议写在mian.js

userRouter为自定义变量  格式为数组包裹addRoute所需数组

2.动态路由搭配404页面使用

如果我们配置了404页面 用以上方式进入动态路由页面还是会进入404页面 我们需要将404页面的路由也动态追加

router.beforeEach((to, from, next) => {
    if(store.userRouter.length || to.path == '/' || to.path == '/index'){
           next() //如果登录页或首页 或 vuex中有动态路由数据 直接通过
    }else{
          //拿到浏览器缓存中动态路由的数据 重新添加
          const data = JSON.parse( localStorage.getItem('userRouter'))
          store.userRouter = data     //重新复制给store
          data.forEach(e=>{        //循环添加路由
          router.addRoute(e) 
          }) 
          //添加404动态路由
          router.addRoute({
          path: "/:catchAll(.*)",
          redirect: "/404",
           })
          next(to.path)  //添加完成后再次进入
    }
})

附:了解动态路由

我这里说的动态路由指的是,由后端提供当前角色可以访问的所有路径,前端提前写好路径与组件之间的映射也就是route,然后根据后端返回的url进行匹配,将匹配到的route加入到router里面。

后端返回的数据大概是这样:

提前写好的route的path一定要和上面的url对应:

export default {
  path: '/main/analysis/overview',
  name: 'overview',
  component: overview,
  children: []
}

动态添加就是遍历咱们上面提前写好的所有routes,看有没有和后端返回的url一样的,有到时候我们就先放到数组routes里,后面通过router.addRoute加入到路由里面去即可:

const routes = mapMenusToRoutes(userMenu)
      routes.forEach((route) => {
        router.addRoute('main', route)
      })

总结 

到此这篇关于vue动态路由刷新失效以及404页面处理办法的文章就介绍到这了,更多相关vue动态路由刷新失效404内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中elementUI表单循环验证方式

    vue中elementUI表单循环验证方式

    这篇文章主要介绍了vue中elementUI表单循环验证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Vue+ElementUI踩坑之动态显示/隐藏表格的列el-table-column问题

    Vue+ElementUI踩坑之动态显示/隐藏表格的列el-table-column问题

    这篇文章主要介绍了Vue+ElementUI踩坑之动态显示/隐藏表格的列el-table-column问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • vue中修改浏览器图标和名字的几种方式

    vue中修改浏览器图标和名字的几种方式

    当针对不同客户需要提供不同的图标时,页面其他图标好替换,但是网页图标就不太一样了,下面这篇文章主要给大家介绍了关于vue中修改浏览器图标和名字的几种方式,需要的朋友可以参考下
    2022-10-10
  • 详解Vue的异步更新实现原理

    详解Vue的异步更新实现原理

    这篇文章主要介绍了Vue的异步更新实现原理,帮助大家更好的理解和使用vue,感兴趣的朋友可以了解下
    2020-12-12
  • 关于vue双向绑定带来的问题及解决

    关于vue双向绑定带来的问题及解决

    这篇文章主要介绍了关于vue双向绑定带来的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • Vue滚动页面到指定位置的实现及避坑

    Vue滚动页面到指定位置的实现及避坑

    这篇文章主要介绍了Vue滚动页面到指定位置的实现及避坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vue新玩法VueUse工具库具体用法@vueuse/core详解

    vue新玩法VueUse工具库具体用法@vueuse/core详解

    这篇文章主要介绍了vue新玩法VueUse-工具库@vueuse/core,VueUse不是Vue.use,它是一个基于 Composition API 的实用函数集合,下面是具体的一些用法,需要的朋友可以参考下
    2022-08-08
  • 手把手教你使用electron将vue项目打包成exe

    手把手教你使用electron将vue项目打包成exe

    Electron相当于一个浏览器的外壳,可以把现有的vue程序嵌入到壳里面,下面这篇文章主要给大家介绍了关于如何使用electron将vue项目打包成exe的相关资料,需要的朋友可以参考下
    2023-01-01
  • Vue替代marquee标签超出宽度文字横向滚动效果

    Vue替代marquee标签超出宽度文字横向滚动效果

    这篇文章主要介绍了Vue替代marquee标签超出宽度文字横向滚动效果,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • vue中的config目录下index.js解读

    vue中的config目录下index.js解读

    这篇文章主要介绍了vue中的config目录下index.js解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03

最新评论