更改ui-view指令处理页面转换的方式

时间:2014-10-22 15:01:10

标签: angularjs angular-ui angular-ui-router

编辑:不要这样做。除非你想花几个小时进行调试,否则这是浪费时间,事实证明这比我想象的要复杂得多。目前解决方案是:

  • 将资源加载移出解析器并进入控制器。
  • 删除ui-router处理的所有输入动画。
  • 添加您自己的动画初始化,并使用ng-class在主范围内输入类。
  • 使用特定于页面的控制器中的$scope.$emit告知主控制器何时完成加载。

简而言之,如果您需要这个(我在ui-router问题跟踪器上看到了一些问题),请不要使用解析器或ng-animate来输入动画。您也无法在$stateChangeStart事件和离开动画上执行此操作,因为这与ui-router的工作方式相冲突。

以下是我原来的问题。


我有一个特定的用例,我需要页面转换,并按照特定的顺序解决,目前它们是这样发生的:

resolve > animate out > animate in

我需要更像这样:

animate out > resolve > animate in

我决定查看ui-router源代码并找出它的行为方式。幸运的是,它是一个非常简单的mod。在ui-view指令中,我们有这段代码。

scope.$on('$stateChangeSuccess', function() {
    updateView(false); // cleanupLastView(); is at the end of this function
});
scope.$on('$viewContentLoading', function() {
    updateView(false); // cleanupLastView(); is at the end of this function
});

我需要将其更新为:

scope.$on('$stateChangeStart', function() {
    cleanupLastView();
});
scope.$on('$stateChangeSuccess', function() {
    updateView(false); // remove cleanupLastView();
});
scope.$on('$viewContentLoading', function() {
    updateView(false); // remove cleanupLastView();
});

问题在于,出于显而易见的原因,我不想去破解核心。有没有办法去注册" ui-router ui-view指令并告诉它使用我的一个指令?

1 个答案:

答案 0 :(得分:2)

所以我实际上写了这个问题然后找到答案。在互联网上旅行时将其发给其他任何人。

答案是复制 BOTH ui-view指令,只需添加一个名为(例如)rich97-view的新指令。然后,您可以在视图中使用它,就像使用ui-view一样。这个方法的好处是mod只适用于你需要它的地方,默认行为没有改变。