赞
踩


该错误是因为vue-router的内部
没有对编程式导航进行catch处理,所以在使用this.$router.push()和this.$router.replace进行路由跳转时,往同一地址跳转时或者在跳转的 mounted/activated 等函数中再次向其他地址跳转时会出现报错。但是在3.1.0版本及更高版本中,页面在跳转路由控制台会报Uncaught (in promise)的问题,push和replace方法会返回一个promise, 你可能在控制台看到未捕获的异常。声明式导航之所以不会出现这种问题,是因为vue-router在内部已经做了相关处理。

//解决编程式路由往同一地址跳转时会报错的情况 const originalPush = Router.prototype.push; const originalReplace = Router.prototype.replace; //push Router.prototype.push = function push(location, onResolve, onReject) { if (onResolve || onReject) { return originalPush.call(this, location, onResolve, onReject); } return originalPush.call(this, location).catch(err => err); }; //replace Router.prototype.replace = function push(location, onResolve, onReject) { if (onResolve || onReject) { return originalReplace.call(this, location, onResolve, onReject); } return originalReplace.call(this, location).catch(err => err); };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。