路由跳转时报错 Navigation cancelled

Daotin 于 2024-03-12 发布 编辑

路由跳转时报错:

Uncaught (in promise) Error: Navigation cancelled from "/" to "/device/ruleEmail" with a new navigation.

问题分析: 这个错误的意思是在导航守卫中重定向了路由,从而导致了一个无限循环的问题。

通常,这个错误会出现在以下情况下:

在导航守卫中调用了 next 函数多次,或者在导航守卫中使用了 this.$router.push 或 this.$router.replace 方法进行了跳转。

导航守卫中的某个条件一直为真,从而导致了无限循环。

解决办法: 检查 router.beforeEach 中,哪里可能会导致循环调用 next 进行跳转。

下面是简答的会触发该错误的示例:

router.beforeEach(async (to, from, next) => {
  if (true) {
    return next({ name: 'home', replace: true });
  }
  next();
});

会一直循环进入 router.beforeEach 导致报错。