编辑:不要这样做除非你想花几个小时调试,否则这是浪费时间,事实证明这比我最初想象的要复杂得多。目前的解决方案是:
- 将加载的资源从解析器移到控制器中
- 删除所有由ui路由器处理的回车动画
- 添加您自己的动画init,并使用ng class将类输入到主作用域中
- 使用页面特定控制器中的
$scope.$emit
来告诉主控制器何时完成加载
简言之,如果你需要这个(我在ui路由器问题跟踪器上看到了一些问题),不要使用解析器或ng animate来输入动画。您也不能在$stateChangeStart
事件和离开动画上执行此操作,因为这与ui路由器的工作方式相冲突。
以下是我最初的问题。
我有一个特定的用例,我需要页面转换,并解决以特定顺序发生的问题,目前它们是这样发生的:
resolve > animate out > animate in
我更需要这样:
animate out > resolve > animate in
我决定检查一下ui路由器的源代码,看看它为什么会这样。幸运的是,这是一个非常简单的mod。在ui视图指令中,我们有这样的代码。
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
指令,并告诉它使用我的指令?
所以我实际上写下了这个问题,然后找到了答案。为其他人在网上旅行时发布。
答案是复制BOTHui视图指令,然后简单地添加一个名为(例如)rich97-view
的新指令。然后,您可以在视图中使用它,就像使用ui视图一样。这种方法的伟大之处在于,mod只适用于您需要的地方,默认行为不变。