我正在尝试使用 ui-router 和 ngAnimate 实现向左/向右滑动的效果(例如在应用程序中导航流)。
为了达到这个效果,我在ui-view
元素的容器上添加了一个 css 类,如下所示:
<div class="ui-view-container" ng-class="navigationDirection">
@RenderBody()
</div>
然后在运行时,我正在监听$stateChangeStart
从 ui-router 广播的内容:
$rootScope.$on('$stateChangeStart', (event, to, toParams, from, fromParams) => {
// Determine if the navigation is back in the flow and set the correct navigation direction
// on the rootScope which is applied to the ui-view-container for the transition
if (typeof from.params !== 'undefined' && typeof from.params.backState !== 'undefined' && to.name === from.params.backState.name) {
$rootScope.navigationDirection = "back";
} else {
$rootScope.navigationDirection = "forward";
}
});
问题是我的代码不适用于进入 ( ng-enter
) 的第一个状态。然而,在第一个状态之后,向前和向后导航的切换完美地工作。ng-enter
, ng-enter-active
,ng-leave
和ng-leave-active
所有样式都与我在我的 css 中指定的转换正确。
为了使其完美运行(包括第一次导航),我唯一能做的就是在我的条件块 on 之后强制$rootScope
to 。完整代码如下:$apply()
$stateChangeStart
$rootScope.$on('$stateChangeStart', (event, to, toParams, from, fromParams) => {
// Determine if the navigation is back in the flow and set the correct navigation direction
// on the rootScope which is applied to the ui-view-container for the transition
if (typeof from.params !== 'undefined' && typeof from.params.backState !== 'undefined' && to.name === from.params.backState.name) {
$rootScope.navigationDirection = "back";
} else {
$rootScope.navigationDirection = "forward";
}
$rootScope.$apply();
});
该应用程序运行良好,但我收到一条错误消息:($apply already in progress
角度错误参考)
相关库的版本是:
- AngularJS v1.3.2
- UI-路由器 v0.3.1
- 角动画 v1.3.2