Angularjs 当数组中的对象列表出现重复时,ng repeat中不允许出现重复错误
我不明白为什么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如何
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
]
}