J'utilise le code ci-dessous, en lame de laravel
<div ng-show="displayErrorMsg" class="form-group m-b alert alert-danger">{{errorMsg}}
Dans le contrôleur angularjs
$scope.errorMsg = "Data Empty";
$scope.displayErrorMsg = true;
setTimeout(function() { $scope.displayErrorMsg = false;}, 2000);
Le message ne disparaît pas automatiquement après 2 secondes.
Mais quand je mets simplement alerte ("test"); ou cliquez n'importe où le message disparaît . Comment résoudre ce problème?
Il suffit d’injecter $timeout
dans votre contrôleur et de l’utiliser.
$timeout(function() { $scope.displayErrorMsg = false;}, 2000);
Aussi, vous pouvez utiliser $ digest ou $ apply comme ci-dessous
setTimeout(function() {
$scope.displayErrorMsg = false;
$scope.$digest();
}, 2000);
setTimeout(function () {
$scope.$apply(function(){
$scope.displayErrorMsg = false;
});
}, 2000);
Vérifiez ici comment cela fonctionne,
http://www.sitepoint.com/understanding-angulars-apply-digest/
J'ai généralement besoin d'une fonction pour attendre un peu pour une raison quelconque, à des fins de test uniquement. En Java, nous pouvons utiliser le Thread.sleep (). Cependant, en JavaScript, je préfère utiliser une fonction simple que j'ai trouvée ici :
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
Cela a fonctionné pour moi dans plusieurs scénarios, y compris AngularJS. Mais, s'il vous plaît, souvenez-vous que cette fonction ne devrait pas être utilisée dans des environnements de production, sauf si vous savez exactement ce que vous faites}.
Exemple 1: setTimeout
var timerCount = function() {
setTimeout(function () {
$scope.displayErrorMsg = false;
$scope.$apply(timerCount);
}, 2000);
}
Exemple 2: $ timeout
$timeout(function() {
$scope.displayErrorMsg = false;
}, 2000);
vous pouvez injecter $ timeout. Méthode window.setTimeout de warapper d'Angular.
essaye celui-là :-
$timeout(function() { $scope.displayErrorMsg = false;}, 2000);
la structure de $ timeout est synatx: - $ timeout (fn, delay, invokeAny, pass)
fonction fn que vous souhaitez retarder
délai: - durée
invokeAny: - la valeur par défaut sera false sinon la fonction fn sera appelée dans le bloc $ apply
pass: - c'est un paramètre optionnel pour exécuter la fonction.
Une autre approche: -
setTimeout(function () {
$scope.$apply(function(){
$scope.displayErrorMsg = false;
});
}, 2000);
la méthode setTimeout étant hors contexte angulaire, nous devons appeler $ apply qui appellera $ digest cycle car, si nous mettons à jour $ scope dans setTimeout, le besoin angulaire de savoir que $ scope est sale.
essayez d'utiliser le timeout angulaire, pour plus de https://docs.angularjs.org/api/ng/service/$timeout
ou Comment changer la valeur après délai en utilisant angularjs?
$timeout(function() { $scope.displayErrorMsg = false;}, 2000);
$scope.errorMsg = "Data Empty";
$scope.displayErrorMsg = true;
if (timer) $timeout.cancel(timer); // restart counter
timer = setTimeout(function() { $scope.displayErrorMsg = false;}, 2000);
Vous pouvez utiliser $ timeout :
$scope.errorMsg = "Data Empty";
$scope.displayErrorMsg = true;
setTimeout(function() { $scope.displayErrorMsg = false;}, 2000);
Avec setTimeout:
setTimeout(function () {
$scope.$apply(function(){
$scope.displayErrorMsg = false;
});
}, 2000);
setTimeout est une méthode d'objet window. Donc, pour accéder à cette fonction, injectez $ window dans le contrôleur .Vous pouvez ensuite appeler n'importe quelle méthode, telle que alert, confirm, setTimeout, setInterval, etc.
Détails https://docs.angularjs.org/api/ng/service/$window
Ensuite, vous pouvez écrire
$scope.errorMsg = "Data Empty";
$scope.displayErrorMsg = true;
$window.setTimeout(function() { $scope.displayErrorMsg = false;}, 2000);
Solution synchrone:
const sleep = ( ms ) => {
const end = +(new Date()) + ms;
while( +(new Date()) < end ){ }
}
Exemple:
(function() {
console.log(+(new Date())); // 1527837689811
sleep(1000);
console.log(+(new Date())); // 1527837690813
sleep(2000);
console.log(+(new Date())); // 1527837692814
sleep(3000);
console.log(+(new Date())); // 1527837695814
sleep(4000);
console.log(+(new Date())); // 1527837699814
sleep(5000);
})();