2016-07-28 5 views
0

ランダムな日付を返すテスト用の一時関数を私のビューに表示しようとしていました。これはループでスタックしているのでエラーを投げていたので、一方向バインディングに切り替えると思ったが問題は解決されない。実際のエラーは、次のとおりです。ランダムな値生成方法への一度だけのバインディング角度

[$rootScope:infdig] 10 $digest() iterations reached. Aborting!

ランダムな値を返すメソッド呼び出しにバインドする場合、なぜ角度が無限ループにはまりありませんか?式が返されると評価を停止してはならないでしょうか?undefinedではないのですか?

plunk

注:私は修正を探していないよ、私はすでに一回生成されたランダムな値を持つ関数呼び出しを交換しましたが、一回の結合なぜ私が知って好奇心モデルが(私の理解から)安定していなければならないと評価され続けます。

答えて

1

これがなぜ発生するのかを理解するには、ダイジェストサイクルを理解する必要があります。

角度が "ダーティチェック" に基づいています

をチェックダーティ。 Angularは基本的に$scopeのすべてのプロパティを繰り返して何が変更されたかを確認します。任意のプロパティに変更がある場合、Angularはそれらのプロパティのウォッチャをすべて起動して変更を通知します

ウォッチはスコープのプロパティを変更できるため、ウォッチが完了した後、 。消化サイクルは、すべてのプロパティを反復処理し、変更されていないことがわかると停止します。時計は常に継続的にそうMath.random()

+0

で起こっているプロパティに新しい値を設定したとき

無限のダイジェストが発生し、データバインディングを一方向ダイジェスト・サイクルには影響しませんか?私はそれの背後にある考えは、ウォッチャーの数を減らすことだと思った。 –

+0

$ scopeにリンクされているものは、angularJSによって継続的に監視されます。それがフレームワークの仕組みです –

関連する問題