AngularJS 1.6 - ng-repeat track by - 仍然有意义吗?

时间:2018-01-19 13:46:40

标签: javascript angularjs

在Angular 1.6 track by ng-repeat仍有意义吗?这是表现良好的做法吗?

1 个答案:

答案 0 :(得分:0)

如果数组中的每个对象都具有唯一标识符属性,则应将该属性用于track by部分。例如:

$scope.items = [
    {id: 1, name: "some name"},
    {id: 2, name: "some name"}
];

你的ng-repeat看起来像这样:

ng-repeat="item in items track by item.id"

如AngularJS文档中所述:

  

最佳实践:如果您正在处理具有唯一标识符属性的对象,则应使用此标识符而不是对象实例进行跟踪,例如:项目中的项目按项目跟踪。如果您以后重新加载数据,ngRepeat将不必为已经呈现的项重建DOM元素,即使集合中的JavaScript对象已替换为新对象。对于大型集合,这可以显着提高渲染性能。

但是,如果您的阵列看起来像这样,那么可能存在欺骗:

$scope.items = [
    {name: "name1"},
    {name: "name1"},
    {name: "name2"},
];

你的ng-repeat看起来像这样:

ng-repeat="item in items track by $index"

在此fiddle中,您可以查看使用或不使用track by对性能的影响。

Source of the fiddle