vue后台项目如何使用router.addRoutes动态加入路由的思路

 更新时间:2023年06月30日 10:11:18   作者:陈小成  
这篇文章主要介绍了vue后台项目如何使用router.addRoutes动态加入路由的思路,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

台路由需求

根据用户权限获取菜单(也就是路由信息),动态加载到路由当中,实现正常路由切换。

1、最开始的实现方式

用户登录—>接口获取当前用户的菜单信息—>格式化菜单信息(格式化成,路由格式)—>使用router.addRoutes动态加入路由。

实现结果

路由添加成功,并且能正常的跳转。但是,当我刷新页面后页面路由出错了,直接进入了错误页面404。

问题原因

vue在初始化的时候,vue-router的实例对象已经生成了,当前路由只包含了如登录页和404等静态页面,用户权限获取的路由需要在登录成功后单独请求权限接口再动态添加到路由当中,所以页面在刷新的时候页面会找不到对应动态的路由。

2、当前的问题在于刷新后

vue和vue-router重新初始化会跳过权限接口的请求和添加动态路由。

本人也卡在这个地方一下午,后面看了网上的处理方式和代码,也整理了一份适应自己项目的处理方式。

最终的思路

在路由的导航守卫router.beforeEach中判断当前是页面刷新还是路由切换,利用vuex的状态值在页面刷新就会重新初始化的特新和本地缓存localStorage存的登录状态值来判断页面刷新还是路由切换。

整体的实现方式如下:

最终的实现方式

注意点:我在vuex中缓存了用户权限的接口返回的数据,可以根据需要存放在本地还是vuex都是可以的

1、用户登录—> 本地缓存用户token和id

vuex中存入登录用户id(存的具体那个值,对还是错都不重要,值只是用来判断页面刷新还是路由切换,随意存。。只是用于后续的判断) —>接口获取当前用户的菜单信息—>格式化菜单信息(格式化成,路由格式)—>使用router.addRoutes动态加入路由。

2、在导航守卫router.beforeEach的方法中

进入路由后,判断

  • 1、本地缓存的token是否有值,没有的话,说明用户没有登录过,直接跳转登录页面
  • 2、token值有的,vuex中的用户id存在的话,页面只是路由切换,用next让路由正常流转下去
  • 3、token值有的,vuex中的用户id的值不存在的话,说明页面刷新了,这个时候需要做两个件事情,

A:设置vuex中的id的为本地缓存的用户id ,

B:重新请求权限接口,格式化后,动态添加到路由,然后重新用next实现接下来的路由跳转,这里需要注意,请求的权限接口需要用async/wait 改成同步接口方便使用。

步骤1具体代码如下图所示:

  • 其中标的数字1标示的是:本地缓存用户token和id
  • 标的数字2的是:vuex中存入登录用户id
  • 标数字3是:,接口请求后,格式化后,并使用router.addRoutes动态加入路由

步骤2的代码实现方式如下图所示:

  • 其中标注的1是:判断本地token的值,没有token的话,直接跳转登录页面,
  • 标注2是:token值有的,vuex中的用户id存在的话,页面只是路由切换,用next让路由正常流转下去 ,
  • 标注3:token值有的,vuex中的用户id的值不存在的话,说明页面刷新了,这个时候需要做两个件事情,

A:设置vuex中的id的为本地缓存的用户id ,

B:重新请求权限接口,格式化后,动态添加到路由,然后重新用next实现接下来的路由跳转

下图是管理vuex中的栏目的,前面说了,可以更具使用情况,缓存本地还是vuex中,只是存放的地方和路由的格式化,路由的格式化,需要根据需要自己格式化

总结

1、vue项目在初始化后,vue-router的实例后生成的路由只包含静态路由,就是那些写死的路由

2、动态路由添加本人认为最核心的不是router.addRoutes,这个大家都会,是如何判断当前页面是路由切换还是页面刷新,

上面已经说了思路,也有代码,可以多试试

这些仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用Vue3和ApexCharts绘制交互式热力图

    使用Vue3和ApexCharts绘制交互式热力图

    热力图是一种数据可视化技术,它使用颜色来表示数据点的值,热力图常用于可视化分布数据,例如人口密度、温度变化或网站流量,本文给大家介绍了如何使用Vue3和ApexCharts创建交互式热力图,需要的朋友可以参考下
    2024-06-06
  • vue中的代码如何进行断点调试

    vue中的代码如何进行断点调试

    这篇文章主要介绍了vue中的代码如何进行断点调试问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • vue实现图片上传功能

    vue实现图片上传功能

    这篇文章主要为大家详细介绍了vue实现图片上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • vue实现跨域的方法分析

    vue实现跨域的方法分析

    这篇文章主要介绍了vue实现跨域的方法,结合实例形式分析了vue.js跨域的原理与相关实现技巧,需要的朋友可以参考下
    2019-05-05
  • vue-resource请求实现http登录拦截或者路由拦截的方法

    vue-resource请求实现http登录拦截或者路由拦截的方法

    这篇文章主要介绍了vue-resource请求实现http登录拦截或者路由拦截的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • vue+el-element中根据文件名动态创建dialog的方法实践

    vue+el-element中根据文件名动态创建dialog的方法实践

    本文主要介绍了vue+el-element中根据文件名动态创建dialog的方法实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • VUE子组件的watch不被触发问题及解决

    VUE子组件的watch不被触发问题及解决

    这篇文章主要介绍了VUE子组件的watch不被触发问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue 卸载eslint方式

    vue 卸载eslint方式

    这篇文章主要介绍了vue 卸载eslint方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • 详解Vue2 SSR 缓存 Api 数据

    详解Vue2 SSR 缓存 Api 数据

    本篇文章主要介绍了Vue2 SSR 缓存 Api 数据,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Vue如何获取表单数据

    Vue如何获取表单数据

    我们在做后台管理系统里面有非常多的表单需求,下面这篇文章主要给大家介绍了关于Vue如何获取表单数据的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06

最新评论