我有一个控制器,它使用函数为关联数组添加时间:
crtl.items = [];
ctrl.build_array = function (code, item) {
crtl.items[code] = item;
}
我的问题是关联数组在javascript中存在问题所以这可行:
<div>
<p>{{ctrl.items['a']}}</p>
<div>
但这不是:
<div ng-repeat="item in ctrl.items">
<p>{{item}}</p>
</div>
如何更改角度函数以便将项目添加到对象而不是关联数组?
答案 0 :(得分:3)
对象和关联数组在JavaScript中是相同的。而且你最好不要通过提供类型的虚假提示来混淆引擎;此...
crtl.items = {}; // plain object, not an array!
ctrl.build_array = function (code, item) {
crtl.items[code] = item;
}
...就足够了,因为你实际上也可以使用ng-repeat
迭代对象:
<div ng-repeat="(key, item) in ctrl.items">
<p>{{item}}</p>
</div>
引用the docs:
您需要知道JavaScript规范没有定义 为对象返回的键的顺序。 (为了缓解Angular中的这个问题 1.3
ngRepeat
指令用于按字母顺序对键进行排序。)1.4版删除了字母排序。我们现在依赖订单 运行
for key in myObj
时由浏览器返回。看起来 浏览器通常遵循在订单中提供密钥的策略 尽管there are exceptions when keys are deleted and reinstated已经定义了它们。如果不需要,建议的解决方法是转换您的 将对象转换为按您喜欢的顺序排序的数组 在提供给ngRepeat之前。你可以使用过滤器这样做 作为
toArrayFilter
或自己在对象上实现$watch
。
答案 1 :(得分:0)
你需要让ctrl.items成为像这样的对象:
ctrl.items = {}
像这样使用:
<div ng-repeat="(code, value) in ctrl.items">
<p>{{value}}</p>
</div>