Angularjs ngRepeat:dupes-在具有嵌套ngRepeat和空字符串的中继器中重复

Angularjs ngRepeat:dupes-在具有嵌套ngRepeat和空字符串的中继器中重复,angularjs,angularjs-directive,angularjs-ng-repeat,Angularjs,Angularjs Directive,Angularjs Ng Repeat,我正在使用angular构建一个来自JSON API调用的数据表。我不得不使用嵌套的ngRepeat,但是我看到奇怪的结果,当行有两个空字符串时,整个表的行都丢失了 我可以用以下方法复制。 函数MyController($scope){ $scope.test={“行”:[ [“一”、“二”、“三”], [“一”、“二”、“三”], [“一”、“三”], [“一”、“一”、“三], [、“两个”、“两个”], [“”、“”、“三”], [“一”、“二”、“三”], [“一”、“二”、“三”]

我正在使用angular构建一个来自JSON API调用的数据表。我不得不使用嵌套的ngRepeat,但是我看到奇怪的结果,当行有两个空字符串时,整个表的行都丢失了

我可以用以下方法复制。


函数MyController($scope){
$scope.test={“行”:[
[“一”、“二”、“三”],
[“一”、“二”、“三”],
[“一”、“三”],
[“一”、“一”、“三],
[、“两个”、“两个”],
[“”、“”、“三”],
[“一”、“二”、“三”],
[“一”、“二”、“三”],
]};};
{{key}}
{{value}}
请注意,当数组有两个空字符串时,嵌套的ngRepeat似乎会失败


我疯了吗?对此有什么解释吗?

有。您需要使用
track by$index
,因为您正在重复原语,或者将其转换为对象数组。原因是ng repeat为每个迭代值(如果它是一个对象)创建唯一的id
$$hashkey
(并作为属性附加到repeated对象上)(除非您将某个值指定为track by)

在您的情况下,您有原语,因此它不能附加属性本身,因此它试图将重复的值视为标识符,并在重复多个空字符串时找到重复。当您使用多个未定义或空的对象重复对象数组时,您会看到相同的效果

因此,在这种情况下,您可以使用trackby
$index
,这样重复的项目将被其索引跟踪

<td ng-repeat="value in ary track by $index">{{value}}</td>
{{value}


更好的选择总是将其转换为对象数组,这样您就不会遇到此类问题。当您有一个唯一标识重复元素的属性(例如
id
)时,您可以将其设置为
track by
属性。重新绑定数组(或刷新数组)时,angular使用跟踪的标识符来确定是否需要从DOM中删除元素并重新创建它,还是只刷新已经存在的元素。在许多情况下,使用项目列表刷新列表时,为了提高性能,总是希望使用跟踪方式,并在对象上重复一个标识符

非常感谢!!!我真的很想知道…为什么他们没有把代码设为默认值??????
<td ng-repeat="value in ary track by $index">{{value}}</td>