使用动态生成的数据数组执行ng-repeat的性能

时间:2016-02-06 17:02:02

标签: javascript arrays angularjs

假设我有一个对象数组,并且每个对象都有唯一的ID和文本属性。

现在,我们说我有ng-repeat喜欢这个:

控制器

$scope.data = my_arr;

查看

<div ng-repeat="for elem in data track by elem.id">
    {{ elem.text }}
</div>

关于track by的特别说明。

如果我为data变量($scope.data = new_arr;)分配了一个全新的数组,如果这个新数组的内容是什么会发生什么:

  • 与前一个完全相同
  • 它包含1个新元素
  • 它包含除1
  • 之外的所有元素

AngularJS是否足够聪明:

  • 不会重新呈现所有div元素
  • 仅将新的div元素附加/插入DOM
  • 仅隐藏/删除新数组中未包含的div

1 个答案:

答案 0 :(得分:1)

由于您使用track by elem.id,Angular将重用DOM元素。它只会向文档树添加或删除一个元素。每the docs

  

如果您稍后重新加载数据,ngRepeat将不必为已呈现的项重建DOM元素,即使集合中的JavaScript对象已替换为新对象。