我對我的角度應用使用了angular 1.6.5,並且遇到了一個非常奇怪的行爲。Angular沒有在ng-view上更新ng-class
我想要實現的是:當ngroute被改變時,我必須從當前視圖中刪除活動類,等待完成動畫,然後將活動類添加到新視圖。
我已經在配置中設置了應用和路由。
var app = angular.module('app', ['ngAnimate', 'ngRoute']);
app.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl:"home.html",
reloadOnSearch:false
})
.when('/about-us', {
templateUrl:"about.html",
reloadOnSearch:false
})
.when('/contact', {
templateUrl:"contact.html",
reloadOnSearch:false
})
.otherwise({
template : "<h1>None</h1><p>Nothing has been selected</p>"
});
});
我在哪裏存儲的動畫的定時和視布爾值,指示可見性的服務:
app.service('animationProperties', function() {
this.animationTimings = {
views: 1000
};
this.visibility = {
view : false
};
});
我有簡單的調試功能和一個onRouteChangeStart功能的一個主控制器,其應該從當前除去有源類視圖(通過使視圖知名度布爾值false):
app.controller('MainCtrl', function ($scope, $window, $location,
animationProperties) {
$scope.animationProperties = animationProperties;
$scope.$on('$routeChangeStart',function() {
animationProperties.visibility.view = false;
});
$scope.toggleActive = function(){
$scope.animationProperties.visibility.view = !$scope.animationProperties.visibility.view;
}
});
而最後一件事,那ngAnimate等待離開動畫完成,然後刪除當前視圖(DONE()方法),並通過使能見度布爾真正再次進入新的觀點:
app.animation('.view', function($timeout, animationProperties) {
return {
enter: function(element, done) {
$timeout(function() {
animationProperties.visibility.view = true;
$timeout(function() {
done();
}, animationProperties.animationTimings.views);//Wait to enter
},animationProperties.animationTimings.views); //Wait for leave function
},
leave: function(element, done) {
$timeout(function() {
done();
}, animationProperties.animationTimings.views);
}
}
});
這裏是plunker
當切換頁面第一時間(導航),你會看到一切工作正常,但當第二次看視圖類沒有更新時,所以動畫不播放。在調試的時候,你可以清楚地看到可見性布爾值被正確更新,但離開視圖時的ng-class沒有得到更新。
您的幫助將非常感謝!