ExpressionChangedAfterItHasBeenCheckedError の説明 質問する

ExpressionChangedAfterItHasBeenCheckedError の説明 質問する

このエラーが繰り返し発生する理由を教えてください。ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.

明らかに、これは開発モードでのみ発生し、本番ビルドでは発生しませんが、非常に迷惑であり、開発環境でエラーが発生しても本番環境では表示されないという利点がまったく理解できません。おそらく私の理解不足のせいでしょう。

通常、修正は簡単です。エラーの原因となっているコードを次のように setTimeout でラップするだけです。

setTimeout(()=> {
    this.isLoading = true;
}, 0);

または、次のようなコンストラクターを使用して変更を強制的に検出しますconstructor(private cd: ChangeDetectorRef) {}

this.isLoading = true;
this.cd.detectChanges();

しかし、なぜこのエラーが頻繁に発生するのでしょうか? 今後このようなハッキーな修正を回避できるように、このエラーを理解したいと思います。

ベストアンサー1

私も同じような問題を抱えていました。ライフサイクルフックのドキュメントngAfterViewInitに変更したらngAfterContentInitうまくいきました。

おすすめ記事