Podłączam pasek stanu do mojej aplikacji kątowej, celem jest, gdy żądanie zostanie wysłane do serwera, na którym pasek wyświetli komunikat odpowiedzi, będzie miało kolor tła oznaczający sukces lub błąd, a jeśli udało się ukryć po kilku sekundach.Animacja kątowa nie działa poprawnie przy pierwszym uruchomieniu, gdy element jest początkowo ukryty
To, co widzę, to to, że po pierwszym uruchomieniu tej logiki po załadowaniu strony animacje nie są uruchamiane (zarówno zanikanie, jak i czasowe zaniki nie działają), ale tylko wtedy, gdy element paska stanu jest początkowo ukryty , jeśli ustawię zmienną ng-show na true podczas ładowania strony, wszystkie animacje działają zgodnie z oczekiwaniami.
Zrobiłem inspekcję źródła za pomocą narzędzi programistycznych Chrome i podczas tego pierwszego uruchomienia div ma te klasy alert-bar ng-hide-remove ng-hide-remove-active alert-bar-success ng-animate ng-hide
po zakończeniu animacji. Gdy animacja działa, jedyne dostępne klasy to alert-bar alert-bar-success ng-animate ng-hide
.
HTML:
<div class="alert-bar" ng-show="response.show" ng-class="(response.result == true) ? 'alert-bar-success' : 'alert-bar-danger'">
<div class="container">
<label>Message: {{response.message}}</label>
</div>
</div>
CSS:
.alert-bar {
width: 100%;
margin-top: -20px;
margin-bottom: 20px;
}
.alert-bar-success {
background-color: #5cb85c;
border-color: #4cae4c;
color: #ffffff;
}
.alert-bar-danger {
color: #ffffff;
background-color: #d9534f;
border-color: #d43f3a;
}
.alert-bar.ng-hide-add, .alert-bar.ng-hide-remove {
-webkit-transition:all linear 0.3s;
-moz-transition:all linear 0.3s;
-o-transition:all linear 0.3s;
transition:all linear 0.3s;
display:block!important;
}
.alert-bar.ng-hide-add.ng-hide-add-active,
.alert-bar.ng-hide-remove {
opacity:0;
}
.alert-bar.ng-hide-add,
.alert-bar.ng-hide-remove.ng-hide-remove-active {
opacity:1;
}
Kontroler:
controllers.controller("AppController", ['$scope', '$timeout', function($scope, $timeout) {
$scope.response = {};
$scope.response.received = function(message, result) {
$scope.response.message = message;
$scope.response.result = result;
$scope.response.show = true;
if (result == true) {
$timeout(function() {
$scope.response.show = false;
}, 4000);
}
};
}]);
Fantastyczny, mogę żyć z wykorzystaniem 2 elementów div. Jutro nagrodzę nagrodę, gdy minie czas blokady. – Phaeze
Cieszę się, że mogę pomóc! Poszedłem do przodu i stworzyłem nowy plunkr, który demonstruje sposób, w jaki można to osiągnąć za pomocą pojedynczej 'div' i' ng-class' bez 'ng-hide': http://plnkr.co/edit/JiLPc6cqiLHR21c64cCy?p= zapowiedź – mjtko