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

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

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

相关文章

  • 用Vue-cli搭建的项目中引入css报错的原因分析

    用Vue-cli搭建的项目中引入css报错的原因分析

    本篇文章主要介绍了用Vue-cli搭建的项目中引入css报错的原因分析,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 一文详解Vue中可重用组件的3个主要问题

    一文详解Vue中可重用组件的3个主要问题

    当我们谈论或讨论在 Vue 中创建用户界面组件时,经常会提到可重用性,在 Vue 中创建真正的可重用组件可能很棘手,在本文中,我将探讨可重用组件的概念、应用这些组件时面临的问题,以及为什么必须尽可能克服这些问题,需要的朋友可以参考下
    2023-10-10
  • 详谈vue中的rules表单验证(常用)

    详谈vue中的rules表单验证(常用)

    这篇文章主要介绍了关于vue中的rules表单验证(常用),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 详解@Vue/Cli 3 Invalid Host header 错误解决办法

    详解@Vue/Cli 3 Invalid Host header 错误解决办法

    这篇文章主要介绍了详解@Vue/Cli 3 Invalid Host header 错误解决办法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Vuejs监听vuex中值的变化的方法示例

    Vuejs监听vuex中值的变化的方法示例

    这篇文章主要介绍了Vuejs监听vuex中值的变化的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Vue中使用canvas方法总结

    Vue中使用canvas方法总结

    在本篇内容中小编给大家分享了关于Vue中使用canvas方法和步骤,对此有需要的读者们参考学习下。
    2019-02-02
  • 初探Vue3.0 中的一大亮点Proxy的使用

    初探Vue3.0 中的一大亮点Proxy的使用

    这篇文章主要介绍了初探Vue3.0 中的一大亮点Proxy的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • vue 中使用print.js导出pdf操作

    vue 中使用print.js导出pdf操作

    这篇文章主要介绍了vue 中使用print.js导出pdf操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • vue动态路由配置及路由传参的方式

    vue动态路由配置及路由传参的方式

    这篇文章主要介绍了vue动态路由配置,vue路由传参的方式,文中给大家提到了router-link这个组件的相关知识,需要的朋友可以参考下
    2018-05-05
  • vue.js移动数组位置,同时更新视图的方法

    vue.js移动数组位置,同时更新视图的方法

    下面小编就为大家分享一篇vue.js移动数组位置,同时更新视图的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03

最新评论