3

以下を見てください。

https://dl.dropbox.com/u/4571/musicopeTypescript/musicopeTypescript/index.html

入力ボックスに「a」と入力すると、10 $digest() iterations reached. Aborting!エラーが発生します。

何か考えがありますか、なぜそれが起こるのですか?

編集:これが問題を引き起こすコードです:

http://embed.plnkr.co/PTkvPc

編集: Song.cloneの問題のようです。それをangular.copyに置き換えると、機能します。誰でもそれを説明できますか?

作業バージョンは次のとおりです。

http://plnkr.co/edit/8Jk1pR?p=preview

4

2 に答える 2

4

なぜこれが起こっているのかを理解するには、 angular が runtime でどのように機能するかを理解することをお勧めします。基本的に、さまざまな値を返し続けるウォッチャーが存在するため、$digest ループを通過し続け、無限ループを停止します。彼らの$digest() ドキュメントから:

現在のスコープとその子のすべてのウォッチャーを処理します。ウォッチャーのリスナーはモデルを変更できるため、$digest() はリスナーが起動しなくなるまでウォッチャーを呼び出し続けます。これは、無限ループに陥る可能性があることを意味します。この関数は、「Maximum iteration limit exceeded.」をスローします。反復回数が 10 を超えた場合。

あなたのコードが何をしているのかを知らなければ、なぜこれがあなたのケースで起こっているのかについて具体的な解決策を示すのは難しいですが、これはいつこのエラーがスローされるかについてのあなたの質問に答えるはずです.

于 2012-11-07T23:36:04.253 に答える
4

フィルターが元のデータを何らかの形で変更していませんか? それが無限の消化サイクルを引き起こすように見える唯一の特定のものです.

編集:異なるクローン機能に関しては、異なる動作につながります。

1つは深いクローン作成を行っていると思われますが、もう1つはそうではありません.1つのケースでは、AngularJSがオブジェクトの等価性をチェックしており、フィルターが毎回新しいオブジェクトを作成しているため、問題が発生しています.

そのロジックの一部を分割し、おそらくその一部をコントローラーまたは追加のフィルターに移動することをお勧めします。配列を絞り込むフィルターは、それを行うだけで、元のオブジェクトへの参照を返すだけです。次に、タグなどを操作するための他のフィルターを作成できます。

Abbaにも+1。:P

于 2012-11-08T06:06:19.690 に答える