4

$scope.itemsを使用してレンダリングされたアイテムのリストがあるとしng-repeatます。このリストはかなり大きく、定期的に更新されますが、一度に更新される項目は 1 つだけです。アイテム 2 で 12 回の更新、次にアイテム 359 で 2 回の更新、次にアイテム 1071 で 89 回の更新など。

私が理解していることから、リスト内の単一のアイテムを更新すると、$scope.itemsほとんどのアイテムがまったく変更されていなくても、AngularJS によって完全なリストが再レンダリングされます。これは無意味なことのように思えますが、より効率的な方法で確実に処理できます。jquery などのツールを使用して自分で DOM を更新することもできますが、それは AngularJS の要点を大きく損ねているようです。AngularJS でng-repeat生成されたモデルの単一のリスト要素を更新する方法はありますか?

4

2 に答える 2

2

これは、バインディングと更新をどのように設定しているかによって異なります。大きなリストがある場合は、更新を行い、サーバーに送信して、リスト全体をサーバーからの戻り値に置き換えます。はい、再レンダリングします。ただし、更新する必要のある1つの情報を更新し、そのアトミックな情報をサーバーに送信するだけの場合は、データセット全体を再レンダリングする理由はありません。

一度に10,000個のアイテムを画面に表示したい場合は、行の表示モードと編集モードを使用してください。一方向バインディング(https://github.com/abourget/abourget-angular)を使用して読み取り専用バージョンをレンダリングし、編集モードの場合は双方向バインディングのフォームを表示できます。これにより、各アイテムを編集しながら、いつでも画面に表示できるアイテムの数が大幅に増えます。

于 2013-03-10T16:06:30.980 に答える
2

私のようにこのトピックにたどり着いた人々のために。ngRepeat ディレクティブの「track by」拡張を確認してください。

http://www.bennadel.com/blog/2556-using-track-by-with-ngrepeat-in-angularjs-1-2.htm https://docs.angularjs.org/api/ng/directive/ngRepeat

乾杯

于 2014-06-02T19:24:36.237 に答える