我有以下情况:我在 AngularJS 应用程序中使用 ui-router 进行路由。在一条路线中,不同的子屏幕有五个子状态。我想以类似轮播的方式为这些之间的过渡设置动画。
导航如下所示:
Link to A | Link to B | Link to C | Link to D | Link to E
state A
从到导航state B
应该使screen A
向左screen B
滑出并从右侧滑入;state B
从到导航反之亦然state A
。
起作用的是仅在一个方向transform: translateX(...);
上为屏幕过渡设置动画。enter
leave
ng-class
通常,我使用标志来控制我的动画。然而,在这种情况下,在ui-view
元素上设置一个类根本不起作用(Angular 1.2 和 ui-router 0.2 还不完全兼容)。scope.$on "$stateChangeStart"
它也不能使用在转换开始后触发的自定义指令来设置它。
如何实现所需的行为?
编辑:解决方案
为了记录:我最终使用自定义$scope
函数来实现它$state.go()
,用于在更改路线之前确定方向。这避免了$digest already in progress
错误。确定动画的类被添加到ui-view
的父元素中;这使当前和未来ui-view
都朝着正确的方向发展。
控制器功能(Coffeescript):
go: (entry) ->
fromIdx = ...
toIdx = ...
if fromIdx > toIdx
$scope.back = false
else
$scope.back = true
$state.go entry
模板:
<div ng-class="{toLeft: back}">
<div ui-view></div>
</div>