在Angular 1.6 track by
ng-repeat
仍有意义吗?这是表现良好的做法吗?
答案 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
对性能的影响。