You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ui-router状态切换触发“The transition was ignored”,通用错误处理器异常触发问题

解决UI-Router重复点击同一状态触发错误处理器的问题

这个场景我太熟悉了!你遇到的问题本质是UI-Router把重复触发同一状态的过渡当成了一个“错误”抛出,但这其实是它的正常行为——当你已经处于main.profile状态时,再次点击同一个ui-sref链接,UI-Router会忽略这个无效过渡,并抛出The transition was ignored的提示,而你的错误处理器没有区分这种“软错误”和真正的状态解析失败,所以误触发了重定向。

解决方法:过滤非致命的过渡忽略错误

我们需要在错误处理器里判断错误类型,只对真正的解析失败场景(比如resolve钩子失败、状态不存在等)进行重定向,过滤掉“过渡被忽略”的情况。

修改后的代码如下:

// 记得注入TransitionRejectionType枚举
$transitions.onError({to: "main.*"}, function (trans, TransitionRejectionType) {
  const transitionError = trans.error();
  
  // 只处理非忽略类型的错误
  if (transitionError.type !== TransitionRejectionType.IGNORED) {
    $state.go("transition-error");
  }
});

补充说明

  • TransitionRejectionType.IGNORED是UI-Router提供的枚举值,专门标识“过渡被忽略”的情况,这种情况不属于业务错误,不需要跳转到错误页面。
  • 如果你的UI-Router版本比较旧,可能没有这个枚举,可以通过判断错误的code值(通常忽略错误的code是4)来替代,但更推荐使用枚举类型保证兼容性。

这样调整后,只有当真正的状态解析失败时,才会触发通用错误页面的重定向,重复点击同一状态链接的情况就不会再干扰用户啦~

内容的提问来源于stack exchange,提问作者Rathma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:51:59