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

时间:2017-04-25 11:02:04

标签: javascript angular angular-ui-router angular-promise angular-transitions

在我的角度应用程序中,我有这个问题。当用户快速双击链接到状态(ui-sref链接)时,目标状态开始加载两次。如果状态窗口没有冻结并停止响应其他状态更改,这将是可以忍受的。当单击另一个ui-sref链接时,URL会相应地更改,在后台进行http调用,但视图会被冻结。

我需要知道,当有另一个已经尝试解决承诺的转换时,如何防止任何转换。我知道我可以用$ stateChangeStart和event.preventDefault()以某种方式运用魔法。我不知道的是如何在解析它的解析块以及如何对应event.preventDefault()之后允许我的转换继续。

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

1 个答案:

答案 0 :(得分:0)

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');
}