2017-03-08 80 views
0

什么因素ng-repeat识别对象数组中的重复项?

angular.module("myApp",[]) 
 
     .controller("myCtrl",function($scope) { 
 
     $scope.persons = [{name:"teja",age:11}, 
 
          {name:"Ash",age:12}, 
 
          {name:"teja",age:11}]; 
 
          });

角不允许在ng-repeat声明的阵列重复的元素。 但有解决方案“track by $index”,它可以在阵列中允许重复元素。 这里我的问题是如何ng-repeat确定数组中有重复的元素,它是在什么因素它标识。 每当创建新对象时,都会创建该对象的新引用,但在上面的代码中,ng-repeat是如何标识重复的。

<div ng-repeat="person in persons"> 
 
{{ person.name }} 
 
</div>

+0

灿你为你的问题添加了一个代码片段? – Nitheesh

+0

看到这个http://stackoverflow.com/questions/16296670/angular-ng-repeat-error-duplicates-in-a-repeater-are-not-allowed – Jenny

回答

0

documentation

为了最大限度地减少DOM元素的创作,ngRepeat使用的功能, “追踪” 集合中的所有项目及其对应的DOM元素。例如,如果一个项目被添加到集合中,ngRepeat将知道所有其他项目已经具有DOM元素,并且不会重新渲染它们。

默认跟踪功能(通过其标识跟踪项目)不允许在数组中使用重复项目。这是因为当有重复项时,不可能在集合项和DOM元素之间保持一对一的映射关系。

所以,如果你有一个是完全一样的两个元素(所以如果angular.equals(a, b))的角度将不能够保持DOM元素和项目之间的关系的轨道,并会发送一个错误