この動作は正常ですか?http://plnkr.co/edit/P1TsiIJbV3MvAjHuJRmF?p=preview-コレクション内の2つのアイテムとranTimesが20回以上呼び出されています。
1 に答える
実際には、正確に10回実行されてから、Error: 10 $digest() iterations reached. Aborting!
(コンソールを開いてエラーを確認する)で中止されます。
AngularJSはモデルのダーティチェックを中継して、DOMのどの部分をいつ/どの部分で再描画するかを判断するため、これは予想される動作です。ここでMiskoからの優れた説明を繰り返したくありません(したがって、この投稿を必ず確認してください:https ://stackoverflow.com/a/9693933/1418796 )が、要するに、あなたが持っているモデルは、あなたが持っているように決して安定しません互いに依存する可動部品を手に入れました。
メソッド呼び出しの実数を確認するにはrun()
、プランカーを少し変更して、コンソールに結果を出力します。http://plnkr.co/edit/fYvguOiM2Y2ocOk02yEN?p=previewご覧のとおり、この関数は合計4回実行されます(各アイテムにつき2回)これは、作業中のダーティチェックを正確に示しています。
最初のプランカーの結果は驚くべきものかもしれませんが、これはAngularJSの機械が内部でどのように機能するかを示しているにすぎません。ほとんどの場合、それは私たちが望んでいることを正確に実行しますが、このようないくつかのコーナーケースでは、その内部の動作に注意する必要があります。