ng-repeat内の同じ問題、フィルタ、関数がすべて実行されています。ng-repeatの1つの項目でAngular.jsが変更され、他のすべての項目のフィルタが実行されます
ここの例では、http://plnkr.co/edit/G8INkfGZxMgTvPAftJ91?p=previewは、いつでも1行で何かを変更すると、someFilter
フィルタは1000回呼び出されます。
明らかに、子スコープの変更がその親に泡立ち、$ digestが実行され、すべてのフィルタが実行されます(https://stackoverflow.com/a/15936362/301596)。そうですか?私の特定のケースでそれが起こらないようにするにはどうすればいいですか?
どのように変更されたアイテムに対してのみ実行させることができますか?フィルタは変更もNGリピートの項目にない場合でも、それはとても無意味だし、それが実際にパフォーマンス上の問題を引き起こしていると呼ばれる私の実際の使用例では
..
//編集クリアplunkerこれがどれだけ角度のダーティチェックの作品です http://plnkr.co/edit/G8INkfGZxMgTvPAftJ91?p=preview
うん、私はまたそれがつもりでも2000の項目に目立たないですが、まだそれは非常に顕著だどのように読み、Miskoが書いたものを読む:代わりに
onkeypress
このように、ディレクティブを使用します。実際にng-repeat(http://plnkr.co/edit/G8INkfGZxMgTvPAftJ91?p=preview)の前に、入力に何か入力すると、いつでもこれらのフィルタが呼び出されるときに、特に複数のフィルタがある場合には、 ng-repeatの各行にinitでフィルタリングしてから変更した後に必要な値を変更する方が良いと思うようになります。 – foxxこれは、これをサポートしています。フィルタはデータ変換のためのものであり、すべての行を監視するべきではないので、実際には厄介な機能です。 –
唯一の解決策は小さなコレクションですか? – Bart