首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保持角度的插入顺序

保持角度的插入顺序
EN

Stack Overflow用户
提问于 2016-02-04 12:27:36
回答 1查看 1.2K关注 0票数 1

我有一个HTML片段,可以在键值集合上迭代。当我创建一个对象并将一些值放入其中,然后通过HTML片段迭代该对象,所有这些都工作得很完美。

但是,由于我需要按特定顺序排列键,所以我使用的是地图而不是普通的对象。这一次,当我调试时,我可以看到我的插入顺序被保留了,但是由于某种原因,遍历集合的HTML片段似乎不知道如何做。当我使用map对象时,屏幕上什么也看不到,当我看到无序内容时,与普通对象相反。

代码语言:javascript
复制
tr ng-repeat="(key, value) in rowTitlesValues"

我的HTML片段是什么样的,当我将rowTitlesValues切换回对象时,我做错了什么,如何保持插入顺序,或者如何对对象排序,使其键按自定义顺序排列?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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上迭代。我相信代码中的行证明了这一点:

代码语言:javascript
复制
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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35201034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档