我有一个HTML片段,可以在键值集合上迭代。当我创建一个对象并将一些值放入其中,然后通过HTML片段迭代该对象,所有这些都工作得很完美。
但是,由于我需要按特定顺序排列键,所以我使用的是地图而不是普通的对象。这一次,当我调试时,我可以看到我的插入顺序被保留了,但是由于某种原因,遍历集合的HTML片段似乎不知道如何做。当我使用map对象时,屏幕上什么也看不到,当我看到无序内容时,与普通对象相反。
tr ng-repeat="(key, value) in rowTitlesValues"我的HTML片段是什么样的,当我将rowTitlesValues切换回对象时,我做错了什么,如何保持插入顺序,或者如何对对象排序,使其键按自定义顺序排列?
发布于 2016-02-04 12:51:47
ng-repeat (链接)上的角参考:
迭代对象属性 可以让ngRepeat使用以下语法迭代对象的属性:
<div ng-repeat="(key, value) in myObj"> ... </div>您需要注意的是,JavaScript规范没有定义对象返回的键的顺序。(为了在角1.3中减轻这一点,ngRepeat指令用于按字母顺序对键进行排序。) 版本1.4删除了字母排序。我们现在依赖于浏览器在myObj中运行密钥时返回的顺序。浏览器似乎通常遵循按其定义顺序提供密钥的策略,. 如果不希望这样做,建议的解决方法是将对象转换为一个数组,该数组在提供给ngRepeat之前按照您喜欢的顺序排序。您可以使用过滤器(如toArrayFilter )来完成此操作,也可以自己在对象上实现$watch。
此外,我认为角1.x不知道如何在Map上迭代。我相信代码中的这行证明了这一点:
collectionKeys = [];
for (var itemKey in collection) { // iterates your object using `in`, not `of` or `Map.forEach()`
...
}
// ng-repeat then iterates the collectionKeys to create the DOM因此,您可能需要像有角度的文档所建议的那样:
.将您的对象转换为一个数组,该数组在提供给ngRepeat之前按您喜欢的顺序排序。您可以使用过滤器(如toArrayFilter )或在对象上自己实现$watch。
https://stackoverflow.com/questions/35201034
复制相似问题