在Repeater中重复键,跟踪会产生问题

时间:2015-05-30 21:09:30

标签: angularjs

我有一个我想要ng-repeat通过的对象。

对象是这样的:

ctrl.obj = {
    "1": ["val1", "val2", ... ],
    "3": ["val1", "val2", ... ],
    ...
    "20": ["val1", "val2", ... ]
}

当我尝试:

<ul ng-repeat="item in ctrl.obj"></ul>

我得到了这个角度误差:

Error: ngRepeat:dupes
Duplicate Key in Repeater

标准解决方案是使用track by $index。但这对我的方案不起作用,因为它现在会导致020之间的每个整数出现,即使我只有13,{{1我理想情况下不喜欢重新格式化对象,因为它是从应用程序外部加载的〜尽管这似乎是Angular的反复出现的必要条件。

我有什么选择重复此对象?

1 个答案:

答案 0 :(得分:1)

此对象是一个字典,其中每个属性都是一个键,每个数组都是一个值。要正确迭代,您需要两个单独的ng-repeat。如下所示:

<div ng-repeat="(key, value) in ctrl.obj">
    {{key}} : {{value}}
    <div ng-repeat="item in value">
        {{item}}
    </div>
</div>

此处可能还有其他内容,因为我无法重现您在使用此语法时遇到的错误,但您声明语法会在您的情况下导致错误。您是否可以发布实际导致此错误的数据样本?

http://plnkr.co/edit/LvvpxNqM6LuGVel4WQt9?p=preview

此plunker正在使用您的原始<ul>,并且它不会产生您描述的任何错误。似乎您还没有提供您要在此处显示的对象的准确表示。

http://plnkr.co/edit/xgded2Ebrf0xKFuupOyr?p=preview

https://docs.angularjs.org/api/ng/directive/ngRepeat