Я пытаюсь применить анимацию к ng-view (маршрутизации) в зависимости от задействованных представлений.
Например, из View1 в View2 мне нужно, чтобы View1 выходил через левую сторону, а View1 входил с правой стороны. В противном случае из View2 в View1 мне нужно, чтобы View2 выходил через правую сторону, а View1 входил с левой стороны.
Но у меня также бывают ситуации, когда мне нужно применить разные анимации к обоим представлениям, например, View1 оставляет затухание, а View2 увеличивает масштаб.
Что я делаю, так это использую связанную с областью переменную в качестве класса в ng-view:
<div ng-view class="{{transition}}"></div>
Эта переменная устанавливается при каждом изменении маршрута примерно так в каждом контроллере:
$scope.transition=Global.transition;
$rootScope.$on("$routeChangeStart",function (event, current, previous) {
// Here I get the leaving view and the entering view and the kind of transition is selected
...
$scope.transition=selectedLeavingTransition; // Set the transition for the leaving view
Global.transition=selectedEnteringTransition; // Set the transition for the entering view
});
Global — это сервис для установки переменной перехода для входящей области видимости из области выхода.
Таким образом, при обнаружении изменения маршрута текущее представление ng устанавливается с классом, связанным с selectedLeavingTransition, а входящее представление ng устанавливается с классом, связанным с selectedEnteringTransition.
Например, если изменение маршрута было с View1 на View2, ng-views во время анимации могут быть:
<div ng-view class="fadeOut ng-animate ng-leave ng-leave-active"></div>
<div ng-view class="scaleUp ng-animate ng-enter ng-enter-active"></div>
CSS в этом случае может быть:
fadeOut.ng-leave {animation:1s fadeOut;}
scaleUp.ng-enter {animation:1s scaleUp;}
Хотя это работает, мне интересно, есть ли более простой способ сделать это, поскольку это кажется небольшим беспорядком.