当 angular ui 路由器中有另一个转换 运行 时,如何防止状态转换?

How to prevent state transition, when there is another transition running in angular ui router?

在我的 angular 应用程序中,我遇到了这个问题。当用户 quickly 双击 link 到状态 (ui-sref link) 时,目标状态开始加载两次。如果状态 window 没有冻结并停止响应其他状态更改,这是可以忍受的。当点击另一个 ui-sref links 时,URL 相应地改变,在后台进行 http 调用,但视图被冻结。

我需要知道,当另一个转换已经在尝试解决 promise 时,我如何才能阻止任何转换。我知道我可以用 $stateChangeStart 和 event.preventDefault() 以某种方式施展魔法。我不知道的是如何让我的转换在解决它的解析块后继续以及如何对应 event.preventDefault()。

感谢您的宝贵时间。任何建议将不胜感激。

Angular UI 路由器的 $state 对象上有一个 属性,'transition',如果它处于活动转换的中间,它将出现。一种选择是删除 ui-sref 属性并改用 ng-click 属性。在您的 ng-click 函数中,您可以在调用 $state.go().

之前手动检查过渡对象是否存在

之前

HTML:

<a ui-sref="Root.State1">

之后

HTML:

<a href="" ng-click="goToStateOne()">

JS:

scope.goToStateOne = function() {
  if (!$state.transition) $state.go('Root.State1');
}