Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 动态生成数据数组的ng repeat性能_Javascript_Arrays_Angularjs - Fatal编程技术网

Javascript 动态生成数据数组的ng repeat性能

Javascript 动态生成数据数组的ng repeat性能,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,假设我有一个对象数组,每个对象都有一个唯一的ID和一个文本属性 现在,让我们假设我有一个像这样的ng repeat: 控制器 看法 {{elem.text}} 关于曲目的特别说明,请参见 如果我将一个全新的数组分配给数据变量($scope.data=new\u arr;),如果这个新数组的内容: 与前一个完全相同 它包含1个新元素 它包含除1以外的所有元素 AngularJS是否足够聪明,能够: 不重新渲染所有div元素 仅向DOM追加/插入新的div元素 仅隐藏/删除新数组中不包含的

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

现在,让我们假设我有一个像这样的
ng repeat

控制器

看法


{{elem.text}}
关于
曲目的特别说明,请参见

如果我将一个全新的数组分配给
数据
变量(
$scope.data=new\u arr;
),如果这个新数组的内容:

  • 与前一个完全相同
  • 它包含1个新元素
  • 它包含除1以外的所有元素
AngularJS是否足够聪明,能够:

  • 不重新渲染所有
    div
    元素
  • 仅向DOM追加/插入新的
    div
    元素
  • 仅隐藏/删除新数组中不包含的
    div

由于您使用的是
track by elem.id
,Angular将重用DOM元素。它将只向文档树添加或删除一个元素。Per:

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


是的,我关心这一部分:
如果集合中的JavaScript对象已被新对象替换。
。问题是,当您从同一个集合中拉/推项目时,这是有意义的,但是如果整个集合发生更改,会发生什么情况?因此,
$scope.data=new\u arr
ngRepeat
将检查匹配的id并在需要时移动/删除元素,但不会删除元素,然后为相同的id再次添加。您是否知道如何测试
ng repeat
(或几乎任何角度指令)的渲染速度?以及“渲染速度”我指的是从角度检测数据集的变化到最后一次与实际渲染/DOM修改相关的操作所花费的时间。我想你可以使用Chrome Devtools来实现这一点:ng repeat表达式是否应该是“for elem in data track by elem.id”?@slbteam08啊,是的,这是一个打字错误,让我来修复它。
$scope.data = my_arr;
<div ng-repeat="for elem in data track by elem.id">
    {{ elem.text }}
</div>