亲测解决 :Navigation cancelled from “/xxx“ to “/xxx“ with a new navigation.

使用vue 3.0 写了一个登入页面,再点击登入的时候,第一次点击会没有反应,F12查看接口都调用了但是没有跳转,控制台打印出错:

 错误说有异常没有捕获;

这个错误是vue -router 内部的错误,没有进行catch处理导致的;

再vue-router3.0以上的版本新增功能:push和replace方法会返回一个promise;

解决方案:

在vue的router的js中添加下面代码

const originalPush = VueRouter.prototype.push
const originalReplace = VueRouter.prototype.replace
// push
VueRouter.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
VueRouter.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)
}

其中VueRouter是在vue初始化的时候引入的Router,完整代码:router/index.js

import VueRouter from 'vue-router'

Vue.use(VueRouter);
// 解决报错
const originalPush = VueRouter.prototype.push
const originalReplace = VueRouter.prototype.replace
// push
VueRouter.prototype.push = function push (location, onResolve, onReject) {
    console.log(onReject + onResolve)
  // if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject)
  return originalPush.call(this, location).catch(err => {
      console.log(err)
      originalPush.call(this, location, onResolve, onReject)
  });
}
// replace
VueRouter.prototype.replace = function push (location, onResolve, onReject) {
    console.log(onReject + onResolve)
  // if (onResolve || onReject) return originalReplace.call(this, location, onResolve, onReject)
  return originalReplace.call(this, location).catch(err => {
      console.log(err)
      originalPush.call(this, location, onResolve, onReject)
  })
}

.......

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]和\[2\]中提到的错误信息是由于路由导航被取消引起的。这种错误通常发生在使用Vue Router进行页面导航时,当用户在导航过程中进行了新的导航操作,导致之前的导航被取消。 解决这个问题的方法是使用路由导航守卫来控制导航行为。在引用\[2\]中提到的解决方案中,使用了`router.beforeEach`方法来定义全局的导航守卫。在导航守卫中,可以判断用户是否已登录,如果未登录则跳转到登录页,否则继续导航到目标页面。 另外,引用\[3\]中提到了Vue Router中的几个导航方法的区别。`router.push`方法用于导航到不同的URL,会向浏览器的历史记录栈中添加一个新的记录。`router.replace`方法也用于导航,但是会替换当前的历史记录,不会添加新的记录。`router.go`方法用于向前或向后跳转指定的页面数量。 根据你提供的错误信息,"Error: Navigation cancelled from "/menu" to "/role" with a new navigation.",可以推断出在从"/menu"导航到"/role"的过程中,发生了新的导航操作,导致之前的导航被取消。可能的解决方法是检查代码中是否有其他地方进行了导航操作,并确保在导航过程中不会发生新的导航操作。 综上所述,你可以通过使用路由导航守卫来解决导航被取消的问题,并根据需要选择合适的导航方法来实现你的导航需求。 #### 引用[.reference_title] - *1* [解决路由版本问题(element...6514:3349 Error: Navigation cancelled from “/welcome“ to “/roles“ wit)](https://blog.csdn.net/meimeib/article/details/118938000)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [5c96:3:Navigation cancelled from “/admin“ to “/users“ with a new navigation.](https://blog.csdn.net/qq_60976312/article/details/121511709)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [解决 vue-router 报错:Navigation cancelled from “/...“ to “/...“ with a new navigation](https://blog.csdn.net/ZYS10000/article/details/121876297)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值