我的firebase中的当前数据类似于:
{"-JZ7b":{"name":"bob","has":"slack"},"-JZ7a":{"name":"connie","has":"slack"}}
如果我使用类似的东西:
<ul><li ng-repeat="(key, person) in people |orderBy 'name'"></li></ul>
我明白了:
获得预期订单without changing my data into some other format的最佳方式是什么?我意识到在这个例子中,键并不完全有意义,但是,假设它们是。构建自定义指令的想法似乎是一个有趣的选择,但是,我的代码可能与原始代码相比有点混乱。
答案 0 :(得分:5)
OrderBy不适用于对象。您可以使用过滤器toArray。
<li ng-repeat="p in people | toArray | orderBy: 'name'" ng-click="cpSelect(p.$key)">
{{p.$key}} {{p.name}} has {{p.has}}
</li>
答案 1 :(得分:5)
您可以使用orderByPriority
将firebase
个对象转换为数组,然后应用普通过滤器和orderBy。
<ul>
<li ng-repeat="person in people | orderByPriority | orderBy: 'name'">
<span>{{ person.$id }} </span>
</li>
</ul>
参考orderbypriority
https://www.firebase.com/docs/angular/reference.html#orderbypriority
答案 2 :(得分:2)
看起来您正在尝试过滤无效的对象。
Filtering on object map rather than array in AngularJS
如果您可以控制数据的格式,则使用angular的最佳做法是:
var objs = [
{ name : 'Whatever' , has : 'value' , etc : 'etc' },
{ name : 'Whatever' , has : 'value' , etc : 'etc' },
{ name : 'Whatever' , has : 'value' , etc : 'etc' }
]
<div ng-repeat="obj in objs | orderBy : name">...