10
votes

ERREUR: $ Digest déjà en cours dans AngularJs lors de l'utilisation d'alerte

Je viens de recevoir les données JSON des services du contrôleur.

Et j'utilise une fonction de rappel pour imprimer le message de réussite quand il a été chargé. Ça fonctionne bien, mais il lance également une erreur que j'ai mentionnée dans la question xxx


7 commentaires

Il n'y a rien de mal à ce code - votre problème doit mentir ailleurs. Vous obtenez généralement ce message d'erreur lorsque vous faites une portée $. $ Apply (...)


L'alerte est-elle échouée? Que diriez-vous d'utiliser une console.log pour voir la valeur du JSON si l'alerte vous donne un problème?


@Boxerbucks Oui Quand j'utilise console.log, il ne jette pas l'erreur. Mais je voulais juste connaître la cause de l'erreur.


Voici la preuve de fonctionnement d'aucun bug dans votre code: PLNKR.CO/EDIT/YDSJQIKBJ9JTTZN3V4QX?p= Aperçu


Dupliqué possible de Erreur: $ Digest déjà en cours


Vous pouvez utiliser ce lien [Erreur $ Digest] car j'ai travaillé parfaite [Erreur $ Digest]: Stackoverflow.com/Questtions/14838184/...


Vous pouvez vous référer à ce message: boynux.com/angularjs-apply-explé i essayé d'expliquer $ Digest en cours très simple.


4 Réponses :


12
votes

alerte , ainsi que confirmer et invite pause l'exécution du code (bloque le fil), au cours de laquelle les délais d'attente et les intervalles vont tout Haywire s'ils auraient dû être déclenché pendant la pause. Le $ Digest est composé de deux boucles plus petites, quel processus $ evalasync file d'attente et la liste watch . La file d'attente evalasync est utilisée pour planifier des travaux qui doivent se produire en dehors du cadre de pile actuel, mais avant le rendu de l'avis du navigateur. Ceci est généralement fait avec Settimeout (0) . Votre alerte pendant ce temps provoque le problème.


2 commentaires

C'est certainement le problème, mais existe-t-il une solution au-delà de ne pas utiliser d'alerte?


Utilisez des alertes non bloquantes (modaux). Vous pouvez même remplacer la fenêtre.Alert pour appeler votre modal. Vous pouvez également styler les alertes modales et peut être meilleure que les alertes natives.



10
votes

Vous pouvez utiliser $ Timeout pour exécuter une alerte après la fin du cycle de Digest et évite cette erreur.

$timeout(function () {
    alert('Alert text');
 }); 


0 commentaires

0
votes
if(!confirm('Your message')){
  return false;
}else {
  return false;
}
Return false in both cases.

0 commentaires

-2
votes

@thesharsieone a raison, c'est du travail pour moi.

p>

function delayalert(messagestr){
           setTimeout(function(){
                alert(messagestr);
            },0);
}


0 commentaires