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
相关产品推荐
相关产品推荐

