当前位置: 首页 > news >正文

addroutes和next()导致的页面无法跳转问题,如登录之后无法跳转到首页,无法重定向,使用next(to)

版本 vue router 3

问题说明

登录成功后,想重定向到/index,执行router.push之后进入beforeEach
由于第一次访问,判断用户信息为空,需要异步拉取用户的权限等信息,
获得响应后,使用addRoutes批量添加路由信息,然后执行next()放行。

但是,页面没有跳转首页,无任何反应
控制台打印日志,没有发现问题:
在这里插入图片描述

问题分析

首先,/index路由是在本地添加的静态路由,所以总是能匹配到结果,和添加的动态路由没有关系,所以问题不是路由匹配失败导致的(路由匹配不到,应该显示白屏才对)

查看vue router源码,发现除了添加路由,下面还有一个if判断,修改了目标页面

src/index.js:addRoutes (routes: Array<RouteConfig>) {this.matcher.addRoutes(routes)if (this.history.current !== START) {this.history.transitionTo(this.history.getCurrentLocation())}}
}

我们当前处于/login登录页面,无法跳转,所以history.current/loginSTART被定义为/
两者肯定是不相等的,于是会执行transitionTo(this.history.getCurrentLocation()),也就是路由目标被改成了当前页面,那我们就还是处在登录界面,而不是首页

问题解决

addRoutes后,不要使用next(),使用next(to),即手动的再次跳转到目标页面。
不过要注意,next(to)会再次进入beforeEach路由守卫,我们要设置判断逻辑,如果路由信息已经存在,就不再执行addRoutes,直接next()放行,才能跳转。不然会一直next(to),循环进入beforEach

同时,我们不希望之后每次刷新同一个页面,都重复插入相同的路由历史记录,可以加一个选项replace: true,使用替换模式来替换最新一条相同历史记录

if(路由信息已添加){// 直接放行next()
}
else{//添加动态路由信息addRoutes(xxx)// 手动跳转next({ ...to, replace: true })
}

参考资料https://mosuzi.com/docs/tech/vue-router-add-route-blocks-next/index.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 树、二叉树
  • 42-java 为什么要有包装类
  • 设置 Nginx、MySQL 日志轮询
  • 栈与队列--python
  • webpack4手动搭建Vue项目
  • 石油设备和相关机械都包涵那些?
  • GLM-4-Long加持的RAG:更准,更简,更全!
  • 集运系统如何多维度展现企业业务情况?
  • Socket编程---UDP篇
  • 能大致讲一下Chat GPT的原理吗?
  • typedef区分结构体类型和结构体变量
  • 深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
  • 数据结构(Java实现):栈和队列相关练习题
  • 人工智能的可解释性(XAI) | 使用LIME
  • 【qml实现TCP服务器】
  • 网络传输文件的问题
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 《深入 React 技术栈》
  • android 一些 utils
  • Android交互
  • avalon2.2的VM生成过程
  • input实现文字超出省略号功能
  • JavaWeb(学习笔记二)
  • JS函数式编程 数组部分风格 ES6版
  • Netty源码解析1-Buffer
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • tensorflow学习笔记3——MNIST应用篇
  • vue-loader 源码解析系列之 selector
  • Windows Containers 大冒险: 容器网络
  • 闭包,sync使用细节
  • 区块链共识机制优缺点对比都是什么
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 新书推荐|Windows黑客编程技术详解
  • 源码安装memcached和php memcache扩展
  • 中文输入法与React文本输入框的问题与解决方案
  • ​Java基础复习笔记 第16章:网络编程
  • ​一些不规范的GTID使用场景
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (14)Hive调优——合并小文件
  • (30)数组元素和与数字和的绝对差
  • (BFS)hdoj2377-Bus Pass
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (编译到47%失败)to be deleted
  • (二)hibernate配置管理
  • (二十三)Flask之高频面试点
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (四)Linux Shell编程——输入输出重定向
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (算法)N皇后问题
  • (一)python发送HTTP 请求的两种方式(get和post )
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .Net 高效开发之不可错过的实用工具