博客
关于我
Vue跳转相同路由报错
阅读量:462 次
发布时间:2019-03-06

本文共 981 字,大约阅读时间需要 3 分钟。

大家使用Vue做开发的时候应该都遇到过这个问题,就是某个页面下调用this.$router.push(path),而path指向的页面和当前页面是同一页面时,就会发生报错,vue-router会提示你避免跳转到当前页面,报错如下:

 

一般情况我们可以在调用this.$router.push之前判断一下,当前页面与path的关系,如果path指向当前页面,就不调用该方法,代码如下:

// 获取当前页面路径let curPath = this.$route.fullPath;// 判断下当前路由是否就是要跳转的路由if (curPath.includes(path)) return;this.$router.push(path);

 

上述做法没有毛病,一般可以解决问题,但是只能在此次调用this.$router.push方法时有效,如果在其他地方也要调用这个方法,就要再写一遍,所以有没有一个一劳永逸的方法呢?

答案是:有滴~

我们可以把这个逻辑放到全局去,如在router/index.js页面,可以这么写:

// 实例化vue-router对象const router = new VueRouter({    routes: [        // ...    ]})/** 解决跳转重复路由报错问题 */ const routerPush = router.push;router.push = path => {   // 判断下当前路由是否就是要跳转的路由  if (router.currentRoute.fullPath.includes(path)) return;  return routerPush.call(router, path);} export default router

以上代码其实是利用“函数劫持”实现的,首先用一个变量将router.push方法缓起来,然后重新定义router的push方法,在方法里面判断一下是否真的要调用push,如果不需要就直接返回。(实际上push方法是定义在VueRouter.prototype上的,所以一开始拿到的router.push实际上是VueRouter.prototype对象上的push,所以也不是在router上重新定义push方法,而是直接添加push方法。)

 

完。

转载地址:http://cmmbz.baihongyu.com/

你可能感兴趣的文章
JavaFX官方文档
查看>>
ORA-12154: TNS: 无法解析指定的连接标识符
查看>>
CentOS5 Linux编译PHP 报 mysql configure failed 错误解决办法
查看>>
Linux 激活网卡ifconfig eth1 up 和 ifup eth1 之间的差别
查看>>
In App Purchase Verification using PHP
查看>>
Mapper.xml中新增数据并返回主键ID(MYSQL)
查看>>
shell编程===》进程锁
查看>>
Linux小操作LVM
查看>>
Split返回数组元素含有空字符串移除
查看>>
解决VS中C语言运行scanf错误
查看>>
Java注解
查看>>
idea上的程序报错-> 错误: 找不到或无法加载主类
查看>>
java刷题--49字母异位词分组
查看>>
《web安全入门》(四)前端开发基础Javascript
查看>>
laravel中视图模板的表单提交
查看>>
在Ubuntu上检查一个软件包是否安装命令
查看>>
mysql的group by ,order by语句的使用
查看>>
call_user_func函数和call_user_func_array函数
查看>>
配置php.ini文件,关闭错误提示,打开错误日志,设置错误日志路径
查看>>
接收get或post数据使用fwrite写入文件中,方便追踪错误;或其他几种缓存方式
查看>>