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,这个大家都会,是如何判断当前页面是路由切换还是页面刷新,

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

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

相关文章

  • react里组件通信的几种方式小结

    react里组件通信的几种方式小结

    本文主要介绍了react里组件通信的几种方式小结,包含了5种方式,主要是props传递,回调函数作为props,Context,Redux或MobX,refs,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • Vue实现录制屏幕并本地保存功能

    Vue实现录制屏幕并本地保存功能

    这篇文章主要介绍了Vue实现录制屏幕功能并本地保存,这里用的是用的是HBuilder X开发,结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • vue 输入框输入任意内容返回数字的实现

    vue 输入框输入任意内容返回数字的实现

    本文主要介绍了vue 输入框输入任意内容返回数字的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • Vue的模板语法以及实战案例

    Vue的模板语法以及实战案例

    Vue使用了基于HTML的模板语法,允许开发者声明式地将DOM绑定至底层Vue实例的数据,下面这篇文章主要给大家介绍了关于Vue的模板语法以及案例的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • element ui 对话框el-dialog关闭事件详解

    element ui 对话框el-dialog关闭事件详解

    下面小编就为大家分享一篇element ui 对话框el-dialog关闭事件详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • Vue函数式组件-你值得拥有

    Vue函数式组件-你值得拥有

    这篇文章主要介绍了Vue函数式组件及vue函数式组件的优缺点,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • 纯JS+Vue和canvas实现一个仪表盘方式

    纯JS+Vue和canvas实现一个仪表盘方式

    这篇文章主要介绍了纯JS+Vue和canvas实现一个仪表盘方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • vue3中使用editor.js的详细步骤记录

    vue3中使用editor.js的详细步骤记录

    富文本编辑器作为直接与用户交互的内容输入生产工具,对大家的项目来说非常重要,下面这篇文章主要给大家介绍了关于vue3中使用editor.js的详细步骤,需要的朋友可以参考下
    2024-01-01
  • vue使用echarts实现动态数据的示例详解

    vue使用echarts实现动态数据的示例详解

    这篇文章主要为大家详细介绍了vue如何使用echarts实现动态数据,文中的示例讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • vue使用keep-alive无效以及include和exclude用法解读

    vue使用keep-alive无效以及include和exclude用法解读

    这篇文章主要介绍了vue使用keep-alive无效以及include和exclude用法解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论