Veuillez m'expliquer pourquoi je continue à obtenir cette erreur : ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.
Évidemment, je ne l'obtiens qu'en mode dev, il ne se produit pas sur ma construction de production, mais c'est très ennuyeux et je ne comprends tout simplement pas les avantages d'avoir une erreur dans mon environnement dev qui n'apparaîtra pas sur prod --probablement en raison de mon manque de compréhension.
En général, la solution est assez simple, il suffit d'envelopper le code qui provoque l'erreur dans un setTimeout comme ceci :
setTimeout(()=> {
this.isLoading = true;
}, 0);
Ou forcez la détection des changements avec un constructeur comme celui-ci : constructor(private cd: ChangeDetectorRef) {}
:
this.isLoading = true;
this.cd.detectChanges();
Mais pourquoi est-ce que je rencontre constamment cette erreur ? Je veux le comprendre afin d'éviter ces corrections improvisées à l'avenir.
23 votes
Tout ce que vous devez savoir sur l'erreur ExpressionChangedAfterItHasBeenCheckedError explique ce comportement de manière très détaillée
0 votes
Je suis également confronté au même problème, qui ne se produit que sur DEV et n'affecte que les journaux de ma console. Au lieu d'introduire un nouveau code dans le projet, je cache/bloque simplement cette erreur dans la console.
2 votes
Directive officielle d'Angular - angular.io/errors/NG0100