Angularjs 当数组中的对象列表出现重复时,ng repeat中不允许出现重复错误

Angularjs 当数组中的对象列表出现重复时,ng repeat中不允许出现重复错误,angularjs,ng-repeat,Angularjs,Ng Repeat,我不明白为什么ng repeat会给我重复的错误。我可以使用track by$index解决这个问题,但我想知道angular何时抛出这个错误 这很清楚 <div ng-repeat="a in [1,1,1,1]">...</div> JS $scope.items = [ {"ab":1,"bc":3}, {"ab":1,"bc":3} ] angular如何

我不明白为什么ng repeat会给我重复的错误。我可以使用
track by$index
解决这个问题,但我想知道angular何时抛出这个错误

这很清楚

<div ng-repeat="a in [1,1,1,1]">...</div>
JS

$scope.items = [
                   {"ab":1,"bc":3},
                   {"ab":1,"bc":3}
               ]
angular如何处理/比较第二个值以确定是否存在重复值

谢谢

编辑

为什么我没有得到复制错误

参见本教程

在本例中,由于两个对象具有相同的键值(
ab
),因此会出现错误。通过$index添加
曲目可能会解决此问题

编辑

从源代码

通过跟踪表达式“”在表达式中跟踪变量–您还可以提供可选的跟踪功能 *可用于将集合中的对象与DOM元素关联。如果没有跟踪功能 *通过集合中的标识指定ng repeat associates元素。这是一个错误 *多个跟踪函数解析为同一密钥。(这意味着两个不同的对象是 *映射到同一DOM元素,这是不可能的。)应将筛选器应用于表达式, *在指定跟踪表达式之前


据我所知,repeat中的两个元素解析为相同的跟踪id(
$$hashkey
我相信),您将得到错误。你真的应该看看他们的源代码。它有很好的注释和注释。

在angular for each object中表示(
JSON
object hasOwnProperty
),angular维护唯一的ID,该ID用于跟踪每个对象并将其与DOM元素绑定,如下所示:

$scope.items = [
                   {"ab" : 1", "bc" : 3},
                   {"ab" : 1, "bc" : 3}
               ]
而Angular不是简单数组的唯一ID

$scope.simpleArrray=[1, 1, 1, 1];
ng repeat
中,angularJS为每个项目维护哈希,迭代并检查
JSON对象
Array
的唯一性,如果在简单数组中发现重复ID,则会引发错误,如果未找到任何
JSON对象
则会增加其唯一ID,因此,在
JSON对象中不会出现重复错误

希望我已经澄清了你的疑问

function AController($scope) {
    var a = {"ab" : 1, "bc" :3}
    var b = a;
    $scope.objsInObj = [
                   a,
                   b
               ]    
}

在上述情况下,当迭代中的对象
a
a
添加
$$hashKey
时,当迭代中的
b
指向已具有
$$hashKey
a
时,重复
,所以angular不会添加新的
$$hashkey
并返回
a的
hashkey,所以它会重复,所以angular引发重复错误

最后我自己澄清了概念

角度检查对象的天气参照是否相同。然而,在我的例子中,有两个对象是相同的,但都指向不同的引用,所以不会产生重复的错误。见更新的小提琴

function AController($scope) {
    var a = {"ab":1,"bc":3}
    var b = a;
    $scope.objsInObj = [
                   a,
                   b
               ]

}

你说得对。track by$index可以解决我的问题,但我想知道angular在对象列表中抛出的重复错误背后的概念。你可以查看angular自己的源代码以获得ng repeat。错误被抛出310行。现在检查,我做了一个小提琴。如果你能帮我澄清我的概念。如果你使用Batarang,你可以看到上面列出的对象示例中的id是由
ng repeat
创建的,没有给出任何错误检查@现在告诉我为什么它没有给出重复错误。仍然不清楚你在说什么。我的简单问题是为什么我没有得到复制错误。根据我的理解,我应该得到一个错误。非常好的答案,对于那些使用
JSON
并得到
ng repeat dups error
但没有发现这个答案有用的人,我建议再次阅读答案。在上面的例子中,在ng repeat when迭代中,当对象“a”在“a”上加上$$hashKey时,当“b”在迭代中,它指向“a”,而“a”已经有$$hashkey,所以angular不会添加新的$$hashkey并返回“a的”hashkey,所以它将是重复的,所以angular会引发重复错误
function AController($scope) {
    var a = {"ab":1,"bc":3}
    var b = a;
    $scope.objsInObj = [
                   a,
                   b
               ]

}