8

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

答えて

4

からすべての不要なもの。 500項目の配列があり、配列が変更されている場合は、フィルターを配列全体に再適用する必要があります。そして今、あなたは「なぜ2倍」と思っていますか?

another answerから:

これは正常であり、angularjsそれはどんな変化が存在するかどうかを確認するためにすべてのフィルタを呼び出す必要があるので、「汚いチェック」アプローチを使用しています。この後、1つの変数(入力した変数)に変更があったことを検出した後、他の変更があるかどうかを検出するためにすべてのフィルタを再度実行します。

そして、それが参照答え:How does data binding work in AngularJS?

編集:あなたは本当に(私は古いCore 2 DuoプロセッサのPC上ではないよ)低迷に気付いている場合は、創造の数は、おそらくありますあなたのUIがどんなものになるかによってあなたはそれを回ることができます。

ユーザーがデータを編集している間は、ユーザーが編集モードを抜けたときにバックアップモデルを変更を隔離し、同期するように編集モードに行を入れることができ
    1. あなただけのモデルを更新できonblurhttp://jsfiddle.net/langdonx/djtQR/1/
  • +0

    うん、私はまたそれがつもりでも2000の項目に目立たないですが、まだそれは非常に顕著だどのように読み、Miskoが書いたものを読む:代わりにonkeypressこのように、ディレクティブを使用します。実際にng-repeat(http://plnkr.co/edit/G8INkfGZxMgTvPAftJ91?p=preview)の前に、入力に何か入力すると、いつでもこれらのフィルタが呼び出されるときに、特に複数のフィルタがある場合には、 ng-repeatの各行にinitでフィルタリングしてから変更した後に必要な値を変更する方が良いと思うようになります。 – foxx

    +1

    これは、これをサポートしています。フィルタはデータ変換のためのものであり、すべての行を監視するべきではないので、実際には厄介な機能です。 –

    +0

    唯一の解決策は小さなコレクションですか? – Bart

    関連する問題