如何通过ng Repeat获取angularFire对象的顺序?

时间:2013-11-07 19:00:04

标签: angularjs angularfire

我的firebase中的当前数据类似于:

{"-JZ7b":{"name":"bob","has":"slack"},"-JZ7a":{"name":"connie","has":"slack"}}

如果我使用类似的东西:

<ul><li ng-repeat="(key, person) in people |orderBy 'name'"></li></ul>

我明白了:

  • -JZ7a康妮有松弛
  • -JZ7b bob松弛

here's a fiddle

获得预期订单without changing my data into some other format的最佳方式是什么?我意识到在这个例子中,键并不完全有意义,但是,假设它们是。构建自定义指令的想法似乎是一个有趣的选择,但是,我的代码可能与原始代码相比有点混乱。

3 个答案:

答案 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>

演示:http://jsfiddle.net/62exD/

答案 1 :(得分:5)

您可以使用orderByPriorityfirebase个对象转换为数组,然后应用普通过滤器和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">...