位置: IT常识 - 正文

真正有效解决vue addRoute动态添加路由后刷新页面白屏的靠谱方法及思路,切实可行!(真正有效解决近视的方法)

编辑:rootadmin
真正有效解决vue addRoute动态添加路由后刷新页面白屏的靠谱方法及思路,切实可行!

推荐整理分享真正有效解决vue addRoute动态添加路由后刷新页面白屏的靠谱方法及思路,切实可行!(真正有效解决近视的方法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue遇到的坑,如何解决的?,vue项目中遇到的最大困难,怎么解决的,真正有效解决近视的方法,vue遇到的坑,如何解决的?,vue解决了什么问题,真正有效解决近视的方法,vue开发中遇到难解决的问题有哪些,真正有效解决近视的方法,内容如对您有帮助,希望把文章链接给更多的朋友!

PS:想直接看解决方法的可以跳过前面的废话阶段从后往前看~

前情回顾:萌新最近从Vue2转战Vue3,一边自学一遍自己做点娱乐项目练练手,这次Vue3项目权限管理用到动态路由,由于以前一直用的addRoutes()方法已经被废弃,只能学着官网用addRoute()搭配forEach()来使用,一开始什么问题都没有,也实现了根据用户角色来获取相对应的路由,实现了权限管理。

但是!一刷新问题就来了,页面直接一片空白,控制台用金色传说vue-router.mjs?f169:35 [Vue Router warn]: No match found for location with path "/uma/admin" 对我疯狂输出。

这对我一个好几年CV经验的老油条来说简直是司空见惯,不就是报个警告吗?不是红码我不看,直接将警告信息CV下来百度一下,果不其然解决方法大大的有。熟练地点开十几个链接,一看什么花里胡哨方法都有,下面我就来列举几个最有代表性的:

1、

Excuse me?报错报的是匹配不到指定的路由,你把通配路由中不存在的地址统一重定向到404这条给注释掉确实就不去404页了,真是个小机灵鬼。

2、网上最多的解决方案:next({ …to, replace: true }),说实话第一眼就觉得不靠谱,试了一下直接死循环,好不容易把判断条件设置好了不死循环了,还是跟以前一模一样,该白屏还是白屏。我来说一下为什么不靠谱,控制台输出一下to就知道,match那一栏就是空的,这么多人写的解决方案都是判断match为空就next(to.path)要么next({ …to, replace: true }),这不是来搞笑的吗?

之所以页面空白,就是因为要to的路由匹配不到,你现在next(to.path)给他强行再进一次路由守卫,想next到to的地址去???这不死循环浏览器都看不下去。

3、将路由信息存到session里。且不说安全性如何,这种方法根本就解决不了问题,现在是匹配不到路由本身,session存了路由地址有什么用?这就像给你个房子的地址,你过去一看房子还没建呢,住哪?问题的根源根本就不是找不到路由地址,to里面的path就是我们要的路由地址,问题是动态路由根本没挂载完成,光知道个地址一点用都没有。

看了一整天,网上没几个方法是靠谱的,大多数是复制粘贴,要么就是有的人分析了上千字结论是自己打错了字,这种文章简直就是浪费大家的时间。

真正有效解决vue addRoute动态添加路由后刷新页面白屏的靠谱方法及思路,切实可行!(真正有效解决近视的方法)

好了,进入正题,请看下图:

从这我们可以明显看出,在控制台报错的时候,根本就没进入路由守卫,所以在路由守卫里配置任何内容或者重新将动态路由添加到session或者vuex里的方法都是没用的,因为人家压根就没来得及进路由守卫就中道崩殂了。

那么我们的思路就很清晰了,要解决路由匹配不到的问题,首先我们应该拿到动态路由,但是以往在路由守卫里进行的动态路由初始化现在行不通,因为在进路由守卫之前,程序已经进行了路由匹配,结果就是没匹配到任何内容,自然就报错了。

我们不妨在脑海里将程序的执行过程过一遍,在关键节点充分使用控制台输出一些内容,方便我们判断,下图是我自己的控制台输出:

为了准确判断问题出在哪,我在很多地方都设置了控制台输出,上图是已经解决问题后的控制台截图,可以看出在报错之前确实将数据写入了vuex,问题总算是解决了。

注意!这图里的报错是因为我故意将数据库中对应的路由删了,为了演示效果而已。

其实具体的解决方法很简单,我将其分为两步:

首先,在Main.ts(在router里面写也行,都一样)里的路由守卫外先执行一遍路由初始化,注意判断token是否存在,不然没登录的用户一样获得了动态路由,权限管理就失效了。

可以看到我这段程序使用了ES7语法糖await,注意!这里必须使用await,如果你使用了我最爱的.then语法,那么很抱歉,你的页面刷新之后肯定还是空白一片。Why?还是用控制台输出来判断,我这里没截图,直接上结论,如果用了.then,你会惊奇的发现,确实进入了initMenu函数中,但是!也就仅仅是进去了,initMenu函数还没执行完,就直接进入路由守卫,接着输出了下一行的“初始化完成”。我们都知道,报错是发生在进入路由守卫之前的,因此即便我们在路由守卫之前进行了路由初始化,我们的程序依然是在初始化完成之前进入了路由守卫中去,所以还是错。我们只能想办法将异步函数同步化,这样才能保证函数执行的顺序。

其次,路由挂载到app上的时机也很重要,上面的内容可以证明,如果初始化还没完成,就已经挂载上了app,那么必然是匹配不到路由报错的,

因此我们还得使用await,强行让挂载等待我们的路由初始化完成,彻底将刷新就空白页的问题解决。

解决完之后回想起来真的挺简单的,但就是这么简单的问题,网上冲浪一整天,折腾到头都快秃了也没能解决,最终只能自己跟着程序走一遍下来,将思路理清,对症下药,也算是顺利将这个bug解决掉了。

网上看挺多人都在问这个问题怎么解决,包括我自己,在搜索引擎翻了十几页,看了个遍,翻来覆去就是这么三四个版本,没一个管用的,我是真不知道他们怎么能用这种一眼错的解决方式解决问题,可能是我的vue3和他们的不太一样。

本文主要提供的是解决方法的思路,而不是代码,每个人的程序都不一样,给代码也没办法通用,很多人上来粘几百行代码,看半天没看出他想表达什么,仔细研究发现又是next(to.path)这种自欺欺人的解决方法,但凡用next(to.path)能进得去页面,压根从一开始就不会报这个错。本文主要也是当做一个笔记,没想到一个这么简单的问题就困住了这么长时间,还是修炼不到位,vue3改了挺多地方,目前还是不太适应,慢慢练吧~

本文链接地址:https://www.jiuchutong.com/zhishi/290186.html 转载请保留说明!

上一篇:珊瑚礁周围的丝鳍拟花鮨鱼群,澳大利亚昆士兰大堡礁 (© Gary Bell/Minden Pictures)(珊瑚礁区域常有的鱼类)

下一篇:Edge&Chrome浏览器暗模式设置(edge浏览器about:flags)

  • 怎么查行程码详细记录(怎么查行程码?)

    怎么查行程码详细记录(怎么查行程码?)

  • amd3600和3600x区别(amd 3600x和3600)

    amd3600和3600x区别(amd 3600x和3600)

  • 抖音主页一个倒三角怎么关闭(抖音主页上)

    抖音主页一个倒三角怎么关闭(抖音主页上)

  • 快手怎么设置反名(快手反摄像头怎么设置)

    快手怎么设置反名(快手反摄像头怎么设置)

  • 微信语音怎么截图播放(微信语音怎么截图转发)

    微信语音怎么截图播放(微信语音怎么截图转发)

  • 苹果7正在搜索解决方案(苹果7正在搜索 重启维修)

    苹果7正在搜索解决方案(苹果7正在搜索 重启维修)

  • 选定要删除的文件然后按什么键即可删除文件(选定要删除的文件然后按什么键可以删除文件)

    选定要删除的文件然后按什么键即可删除文件(选定要删除的文件然后按什么键可以删除文件)

  • 苹果面容解锁一直转圈(苹果面容解锁一直转圈怎么回事)

    苹果面容解锁一直转圈(苹果面容解锁一直转圈怎么回事)

  • 冰箱最上面一层叫什么(冰箱最上面一层不制冷怎么回事)

    冰箱最上面一层叫什么(冰箱最上面一层不制冷怎么回事)

  • 勿扰模式能收到短信吗(勿扰模式能收到隔空投送吗)

    勿扰模式能收到短信吗(勿扰模式能收到隔空投送吗)

  • 抖音买东西可以退货吗(抖音买东西可以让别人付款吗)

    抖音买东西可以退货吗(抖音买东西可以让别人付款吗)

  • 华为jeran10是什么型号(华为jeran10是什么意思)

    华为jeran10是什么型号(华为jeran10是什么意思)

  • win7网址收藏夹在哪里(windows7浏览器收藏夹)

    win7网址收藏夹在哪里(windows7浏览器收藏夹)

  • 淘宝买东西地址写错了已经发货了怎么办(淘宝买东西地址错了怎么改地址)

    淘宝买东西地址写错了已经发货了怎么办(淘宝买东西地址错了怎么改地址)

  • 12306显示无票火车站窗口还有吗(12306显示无票火车站还会有票吗)

    12306显示无票火车站窗口还有吗(12306显示无票火车站还会有票吗)

  • 淘宝津贴在哪里领(淘宝津贴是什么意思?)

    淘宝津贴在哪里领(淘宝津贴是什么意思?)

  • word序号怎么自动排序(word序号怎么自动生成)

    word序号怎么自动排序(word序号怎么自动生成)

  • 苹果13.1.2信号不好(苹果13信号不好?)

    苹果13.1.2信号不好(苹果13信号不好?)

  • oppor11s听筒声音小

    oppor11s听筒声音小

  • pro和pro max区别(苹果pro和promax区别)

    pro和pro max区别(苹果pro和promax区别)

  • p20上市时间(p20pro上市时间和价格)

    p20上市时间(p20pro上市时间和价格)

  • 怎么关掉酷狗音乐原唱声音(怎么关掉酷狗音乐里面的桌面歌词)

    怎么关掉酷狗音乐原唱声音(怎么关掉酷狗音乐里面的桌面歌词)

  • 发朋友圈文字怎么不被折叠(发朋友圈文字怎么发)

    发朋友圈文字怎么不被折叠(发朋友圈文字怎么发)

  • Vue中的路由守卫(vue中的路由守卫有哪些)

    Vue中的路由守卫(vue中的路由守卫有哪些)

  • 增值税建筑服务税率变化时间
  • 进项税额转出时点
  • 增值税专票已经报税作废不了怎么办
  • 未开发票如何确认收入并进行申报
  • 固定资产的税费可抵扣吗
  • 自产和外购的视频区别
  • 电信宽带个人和公司办收费标准
  • 残疾证挂靠一年多少钱
  • 天然气入户安装需要什么资质
  • 加计抵减其他收益汇算清缴填哪里
  • 简易计税和一般计税的区别
  • 现金折扣怎么进账
  • 企业所得税税前扣除异常是什么意思
  • 虚开发票对所得税的影响是怎样的?
  • 税务需要申报吗
  • 增值税发票过期了税金怎么办
  • 差额征税扣除额大于收入时如何开票?
  • 建筑业预缴增值税税率
  • 餐饮企业员工
  • 免税项目进项税为什么不可以抵扣
  • 付了款没有收到发票
  • 以前月份个税没交怎么办
  • 安全生产费怎么算
  • 购买原材料无法确认收入
  • windows10office更新
  • 王者荣耀中孙尚香怎么玩
  • 生产成本结转库存商品的数量
  • 企业受赠业务的法律规定
  • vue3+vite+typescript出现does not provide an export named ‘xxx‘ 解决方法
  • 华沙的教堂
  • 材料入库款项未付会计分录
  • transformers document
  • php分段
  • CLIP(Contrastive Language-Image Pre-Training)简介
  • cp命令复制文件到另一个目录并改名
  • php封装数据库操作
  • 自制原始凭证代码怎么填
  • 加收税收滞纳金属于行政处罚吗
  • phpcms 数据库配置文件
  • 异地项目需要预缴增值税吗
  • 外管证预缴税款上报后,怎么交税
  • 参展费可以抵扣吗
  • 固定资产折旧应纳税所得额调整
  • 织梦网站特有标识
  • 如何对php网站页面进行修改
  • sqlyog提示
  • 补贴,津贴是否合理
  • mysql数据库维护
  • 残保金怎么计提和缴纳
  • 事业单位是怎样向上申请招人的
  • 营业执照备案登记表
  • 统一机构信用代码最后一位校验码
  • 应收账款核算流程
  • 购买的车位是否要交税
  • 实缴出资未注明投资款
  • 半成品仓库的管理办法
  • 未开票收入怎么填写增值税申报表
  • 填制凭证的主要内容和注意事项
  • 新公司成立建账流程
  • 什么是活页式账户
  • 账簿凭证管理的内容
  • sql server 数据库日志不可用
  • windowsserver2008r2激活密钥
  • win8系统如何分区
  • 如何快速卸载游戏
  • ubuntu14.04启动不了
  • windows8更新不了怎么办
  • linux如何创建ftp
  • Win10 build 10240有"启用快速启动"功能吗?如何开启和关闭这个功能?
  • win10无internet怎么办
  • 在github开源的项目有假的吗
  • linux的安装
  • Unity3D游戏开发pdf
  • cls方法可以清除
  • 处理判断字符串是否相等
  • activate webstorm
  • javascript语言基础
  • 财税咨询服务内容包括
  • 重庆税务信息采集如何操作
  • 模范劳动者
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设