2017-12-07 31 views
0

私はフォローのデザインがあります。ExpressionChangedAfterItHasBeenCheckedErrorが原因

Parent 
+ Child 1 
    + Child 2 

子供2が含まれており、入力フィールドを、ユーザーのヒットは、ENTER、それがイベントを発します。子1はそれを傍受し、親によって傍受される実行イベントを発する。 Parentは検索を実行し、結果をInput()経由でChild 1に返します。

ユーザーがreload = Yフラグを指定してParentに移動すると、以前に保存された条件に基づいて検索が自動的に実行されます。私はルートをチェックすることにより、ngOnInitでこれを行うのparams = Yをリロードし、同じイベントを実行放出、それが親になり、結果は(入力を介して戻ってくる)私も、コンソールにこのエラーが出ますが、これは働いている -

ExpressionChangedAfterItHasBeenCheckedError:それは確認した後に発現が変化しています。以前の値: 'undefined'現在値: '[オブジェクトオブジェクト]'。

は、私がこの記事の続き: https://blog.angularindepth.com/everything-you-need-to-know-about-the-expressionchangedafterithasbeencheckederror-error-e3fd9ce7dbb4

を、説明し、今でエラーがなくなっていると()のsetTimeoutを使用しました。ここで何が起こったのですか? setTimeoutメソッドをやっている正確に何を

。公式の説明は、「次VMの順番に実行されます 『』 setTimeout関数のスケジュール」マクロタスクです。

したがってsetTimetoutは、次の変更検出サイクルまで定義された関数の実行を遅らせますか? 「次のVMターン」は何を意味していますか?

答えて

1

SetTimeoutを使用すると、基本的にフローの一部が新しい変更検出サイクルに分岐します。タスクを完了した後に起こるもの。

あなたが見ているエラーは基本的にAngularの防御メカニズムであり、複数のソースが同じ変更検出サイクルで同じプロパティを何度も更新しないようにしています。これが許されれば、表示される最終的な価値と誰がそれを生産したのかを知ることは本当に面倒です。

これは、複数の変更が同じ変更検出サイクルで行われなくなるため、エラーが表示されなくなる理由です。別のタイミングに分割することのオーナーシップを取っているので、Angularはこれで問題ありません。

+0

ありがとうございました! – SBKDeveloper

関連する問題