У меня есть следующий случай: я использую ui-router для маршрутизации в моем приложении AngularJS. В одном маршруте существует пять дочерних состояний для разных подэкранов. Я хочу анимировать переход между ними карусельным образом.
Навигация выглядит следующим образом:
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>