首页 > 其他分享 >也谈$router.push 不生效的故障

也谈$router.push 不生效的故障

时间:2023-04-17 17:57:24浏览次数:33  
标签:mhome home 故障 跳转 push router isMobile

1,故障现象

一个vue2的前端程序,需要根据浏览的设备类型来进入不同的path。

具体说就是PC端和手机端的home页面是分开来写的,PC端的home路径是“/home”,手机端的home路径是“/mhome”

用户点击进入程序的超链接的路径写死是进入“/home”路径(如“http://xx.yy.zz/app/home”),但是需要在进入“/home”时再次判断设备类型,如果是移动设备就跳转到“/mhome”路径。

代码如下:

home.vue

    mounted() {
        if (this.isMobile()) {
            alert('isMobile');
            this.$router.push('/mhome');
           
        } else {
            alert('not Mobile');
        }

    。。。。其它PC端代码

 

结果在手机上测试,跳出了“isMobile”信息,但是最终显示的界面并不是“/mhome”的内容,而是仍然是“/home”下的内容,也就是说以下代码执行无效:

this.$router.push('/mhome');

 

2,原因分析

按理来说,this.$router.push代码应该能将路由跳转到新页面,但是测试结果显示无效。

将代码改换成

this.$router.replace('/mhome');

结果依然无效。
后来发现,mounted()后续的代码块中,又执行了其它跳转,

 1     mounted() {
 2         if (this.isMobile()) {
 3             alert('isMobile');
 4             this.$router.push('/mhome');
 5            
 6         } else {
 7             alert('not Mobile');
 8         }
 9 
10                 。。。
11                 。。。
12         if (jumpInfo != null) {
13             let opcode=  jumpInfo.opcode;
14             if (opcode == 'score') {
15                 this.$router.replace('/xxx');
16             }
17         } else {
18             this.$router.replace('/yyy');
19         }

 

以上第15/18行执行了新的跳转,将原本准备执行的“/mhome”跳转给覆盖了。这就是跳转失效的原因所在。


3,解决方案

既然找到了原因,解决方案就简单了。在跳转后立即return,避免继续往下执行即可。

    mounted() {
        if (this.isMobile()) {
            alert('isMobile');
            this.$router.push('/mhome');
            return;
        } else {
            alert('not Mobile');
        }

 

代码如上修改后,测试通过。

 

4,总结

本问题的发生和解决显示,vue代码在执行路由操作时,不是同步阻塞型的,而是异步非阻塞型。

即调用 this.$router.push 代码后,一方面开始准备跳转,同时代码也继续向下执行,一旦二者有路由冲突,那么结果就是难以预料的了。

 

标签:mhome,home,故障,跳转,push,router,isMobile
From: https://www.cnblogs.com/jackkwok/p/17326634.html

相关文章

  • vue-router
    ###################npminstallvue-router                                  <router-linkto="/user"tag="button"active-class="active"exact>GotoUserPage</router-link>这个例子中,当用户点击按钮时,会跳转到/user路由,并且按钮会添......
  • MATLAB 蚁群算法 配网重构 故障恢复 最小失电负荷 以提高供电可靠性和降低线损为目标,
    MATLAB蚁群算法配网重构故障恢复最小失电负荷以提高供电可靠性和降低线损为目标,建立配电网重构的优化模型,对算法进行综合比较,选取蚁群算法进行网络重构的优化。以IEEE33节点的配电网重构为算例,验证了本模型的可用性及利用蚁群算法解决重构算法的高效性。ID:4865067112444......
  • 问题故障排查
    今天在编写代码的时候发现一个问题,当我引入一个按钮控件的时候,发现页面就加载不了。后面通过排除法,发现代码中出现了循环应用。比如A组件,使用了mixinsBB中有个对话框又import了A,这个时候就会出现循环应用,页面工作不正常的情况。解决办法:不在页面使用import方法。......
  • 故障设备扫码报修,一招打破企业报修困局
    很多行业都实现了机械化自动化的生产阶段,但是设备出现故障还是需要设备管理者进行报修,传统的报修方式又累又麻烦,如今微信扫码报修就能打破企业报修困局,从而提高了企业的管理水平。一、快速扫码报修故障扫码报修系统,区别于传统的电话、纸质报修的方式,故障报修人通过手机故障报修系统......
  • 【故障诊断】基于KNN、SVM、RF、DT、ET多种算法实现制冷系统故障诊断附Matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • Vue之 vue-router
    目录简介安装vue-router使用vue-routerrouter的方法路由跳转方法一使用js控制方法二使用标签控制路由跳转携带参数方法一使用问号携带方法二使用斜杠分隔符携带方法三使用对象的方式跳转方法四标签方式跳转携带参数router与route的区别多级路由路由守卫全局路由守卫前置路由......
  • 故障注入的方法与工具
    ​可靠性是评估软件质量的重要属性,关键安全系统(SafetyCriticalSystems,SCS)对可靠性的要求尤为严格,因其一旦失效,将可能对生命、财产或环境造成重大损害。以汽车为例,ISO26262中ASILD要求相关系统失效率低于10Fit(Failureintime),即每千件产品在10∧9小时内的故障数需低于10件。测......
  • 记一次flannel跨节点不通的故障
    先贴一张flannel通信原理图镇楼。最近遇到了一个问题,在一个k8s集群中有一个Fedora节点的flannel.1和别的节点flannel.1不通。确认了一下内容:flannelconfigmap中的vxlannetwork配置是否和集群配置文件cat/etc/kubernetes/manifests/kube-controller-manager.yaml|grepcidr......
  • MiPush Framework使用指南 转载
     MiPushFramework使用指南  指南版本ver=v0.4.4latest-update=2022.04.07以下内容全文为MiPushFramework使用指南,请分享给有需要的人声明本文档依据MiPush版本:v0.3.8依据设备:一加9PROColor13本文档是【大量搬运群内精华消息】然......
  • 浅谈船舶交流电网绝缘监测及故障定位系统开发
     摘要:针对传统船舶电网绝缘监测装置可靠性不足、受泄漏电容的影响较大、测量范围较窄、测量准确度不高等问题,以船舶IT交流供配电网络为研究对象,建立一种能够实时监测整个电网系统对地绝缘值与泄漏电容值,实现实时故障定位的系统,并结合Hausdoff距离算法进行容错计算。结果表明:该系统......