解决动态添加路由 出现重复路由问题

这篇具有很好参考价值的文章主要介绍了解决动态添加路由 出现重复路由问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


highlight: atom-one-dark theme: simplicity-green

在做后台管理项目时,需要根据用户权限动态添加路由,但退出登录账号1,登录账号2时,出现了[vue-router] Duplicate named routes definition这样的警告,如图:
duplicate named routes definition,前端,vue.js,javascript,前端

Duplicate named routes definition:重复定义路由

查阅资料,这一篇文章给出了两种解决方案:
解决$router.addRoutes()添加路由,出现的路由重复添加问题

方法1:location.reload(),vue上的所有实例在刷新的时候都会被重置
方法2:刷新时只重置路由

显然,方法1所有都被重置,比较耗时,对用户不太友好,只重置路由似乎是个更好的选择
文章里给出方法2的解决方案是定义一个重置路由的函数,再在退出登录时调用即可

于是,采取方法2开始解决问题
因为涉及路由的定义,重置函数应该写在router文件夹下的index.js里

//定义新建路由方法
const createRouter = () =>
  new Router({
    mode: "history",
    routes: routes //传入定义的路由参数
  });
//新建路由
const router = createRouter()
//重置路由函数 export
export function resetRouter() {
    const newRouter = createRouter(); 
    router.matcher = newRouter.matcher; //替换成新的空路由
  }

export default router

router.matcher是比较核心的一个属性,修改了matcher即新的routes生效
对外提供两个方法match(负责route匹配), addRoutes(动态添加路由)

具体过程:在做路径切换transitionTo方法中,首先就会使用const route = this.router.match(location, this.current)来匹配route, 其实内部会使用matcher来做匹配。修改了matcher即新的routes生效。

match (
    raw: RawLocation,
    current?: Route,
    redirectedFrom?: Location
  ): Route {
    // 这里使用matcher的match方法来做匹配
    return this.matcher.match(raw, current, redirectedFrom)
  }

对router.matcher属性做修改,即新的routes就会替换老的routes, 其实就是replaceRoutes()的含义(但是官方没有提供这个API)。

export type Matcher = {
  match: (raw: RawLocation, current?: Route, redirectedFrom?: Location) => Route;
  addRoutes: (routes: Array<RouteConfig>) => void;
};

接下来,就是在退出登录按键下调用这个resetRouter函数
退出登录在CommonHeader.vue的下拉菜单里
首先在CommonHeader.vue里引入resetRouter函数

import {resetRouter} from '../router/index'

然后在按键绑定的方法里调用即可

 handleCommand(command){
            if(command === 'logout'){
                Cookie.remove('token')
                Cookie.remove('menu')
                this.$router.push('/login')
                resetRouter()    //重置路由           
            }
        }

再次运行项目就没有警告了,问题解决!

参考资料(vue.js - vue-router工作原理概述和问题分析)文章来源地址https://www.toymoban.com/news/detail-809497.html

到了这里,关于解决动态添加路由 出现重复路由问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 升级Xcode 15后,出现大量Duplicate symbols问题

    升级到Xcode 15后,原先Xcode14可以编译的项目出现大量Duplicate symbols,且引用报错指向同一个路径(一般为Framework)下的同一个文件。经过查找相关解决,可通过 在Xcode - Target - Build Setting - Other Linker Flags 添加一行\\\"-ld64\\\" 即可解决该问题 原因是Xcode15采用了新的链接器(Linker),

    2024年02月08日
    浏览(29)
  • vue3 动态添加路由刷新后页面丢失(白屏)问题

    动态添加路由操作一般是用vuex或者Pinia封装,在登录页面调用 如果出现刷新页面丢失有两种可能: 1:vuex或者Pinia没有做持久化处理 2:动态添加路由需要在main.ts里面也调用一次 不需要路由守卫即可实现 注意:必须要在页面挂载前还有路由配置完成前调用添加,不然还是丢

    2024年02月16日
    浏览(44)
  • android 出现Duplicate class 报错时 解决方案

    可以选择直接复制 我的标题 然后sync 就ok了 android.useAndroidX=true 表示“Android插件会使用对应的AndroidX库,而非Support库”; 未设置时默认为false; android.enableJetifier=true 表示Android插件会通过重写其二进制文件来自动迁移现有的第三方库,以使用AndroidX依赖项;未设置时默认为f

    2024年02月05日
    浏览(30)
  • 解决 Android 开发过程中 出现 Duplicate class(包冲突)

    1、现在大部分的项目都是支持 Androidx 的,所以出现 Duplicate 的时候 先把 gradle.properties 文件中添加参数,支持使用AndroidX 2、有些 *.jar/*.aar 不支持 AndroidX 的时候,将上面的禁用 然后再排除 AndroidX 的引用   有很多,搜索一下 androidx 就能找到 3、排除了Androidx 的冲突后,包还有

    2023年04月09日
    浏览(32)
  • ModuleNotFoundError: No module named matplotlib 问题解决方案-matplotlib无法添加到pycharm的解决

    练习题中 import matplotlib.pyplot as plt squares = [1, 4, 9, 16, 25] ❶ fig, ax = plt.subplots() ax.plot(squares) plt.show() 无matplotlib模块报错的原因是pycharm的问题,使用其他编辑器都可以正常绘图。 处理方法: 在pycharm中设置,python解释器,添加解释器,选择系统解释器,添加后选择matplotlib安装一

    2024年02月05日
    浏览(51)
  • 解决pyQT5运行出现“name ‘Ui_MainWindow‘ is not defined”问题

    按理说,在自行编辑好界面保存 生成一个ui文件后,再转成py文件 但是直接运行py文件出现不能出现界面 需要输入一下代码: from PyQt5.QtWidgets import QMainWindow,QApplication import sys if __name__ == \\\'__main__\\\':     app = QApplication(sys.argv)     window = QMainWindow()     ui = Ui_MainWindow()     ui.set

    2024年02月02日
    浏览(44)
  • 解决ENSP路由器启动之后一直出现#问题

    记录一下自己所偶到的问题 首先就是遇到了这样的情况 随后上网查了发现我的配置都是对的(网关,子网掩码什么的),唯一有点不一样的就是我的这里好像有点少。 只有一个单一的ensp(下面的那个是我后面添加上去的,),其他的啥都没有。 然后我就去我的ensp安装路径下

    2024年02月12日
    浏览(50)
  • Linux系统下Found a swap file by the name “xxx.swp“问题出现的原因及解决方法

    情景再现 我在一次使用vim编辑文件的时候,习惯性的按了 ctrl+s 想保存,然后屏幕就卡住了,最后我使直接暴力推出了终端,再次编辑想保存的时候就出了下面的警告提示: 问题分析 按 enter 可以进入编辑,编辑完 wq 保存的时候提示 E45: \\\'readonly\\\' option is set (add ! to override) ,加

    2024年02月01日
    浏览(52)
  • vue-element-admin vue设置动态路由 刷新页面后出现跳转404页面Bug 解决方法

    做项目时遇到的这个bug,因为除了跳404之外也没太大影响,之前就一直放着没管,现在项目基本功能实现了,转头处理了一下,现在在这里记录一下解决方法 这个bug的具体情况是:设置了动态路由之后,不同的用户登录之后显示了不同的侧边栏,在侧边栏点击菜单,渲染对应

    2024年04月28日
    浏览(37)
  • zookeeper出现java.net.NoRouteToHostException: 没有到主机的路由问题解决

             本人用的版本稍微有点旧,用的是VMware11、centos用的是6.5版本的、JDK用的是1.8的、Hadoop用的是3.2.1版本的、zookeeper用的是3.5.6的。在前面的配置中一直没有问题,经过反复排查zookeeper的配置是没有问题的,用jps查看进程,QuorumPeerMain进程都正常启动。        但是用

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包