Sto collegando una barra di stato sulla mia app angolare, lo scopo è quando viene fatta una richiesta al server la barra mostrerà il messaggio di risposta, avrà un colore di sfondo per indicare il successo o l'errore, e se è riuscito a nascondersi dopo pochi secondi.L'animazione angolare non funziona correttamente alla prima esecuzione quando l'elemento è inizialmente nascosto
Quello che sto vedendo è che la prima volta che questa logica viene eseguita dopo aver caricato la pagina, le animazioni non vengono eseguite (non vengono eseguite sia la dissolvenza in apertura che quella in uscita), ma solo se l'elemento della barra di stato è nascosto inizialmente , se imposto la variabile ng-show su true a pagina carica tutte le animazioni funzionano come previsto.
Ho ispezionato la fonte tramite gli strumenti di sviluppo di chrome e durante questa prima esecuzione il div ha queste classi alert-bar ng-hide-remove ng-hide-remove-active alert-bar-success ng-animate ng-hide
dopo che l'animazione avrebbe dovuto essere terminata. Quando l'animazione funziona, le uniche classi presenti sono alert-bar alert-bar-success ng-animate ng-hide
.
Il codice 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>
Il 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;
}
Il controllore:
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);
}
};
}]);
Fantastico, posso vivere con l'utilizzo di 2 div. Assegnerò la taglia domani quando sarà scaduto il tempo di blocco. – Phaeze
Felice di essere di aiuto! Sono andato avanti e ho creato un nuovo plunkr che dimostra un modo in cui può essere ottenuto con un singolo 'div' e' ng-class' senza 'ng-hide': http://plnkr.co/edit/JiLPc6cqiLHR21c64cCy?p= anteprima – mjtko