6

我的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 鲍勃有松弛

这是一个小提琴

在不将我的数据更改为其他格式的情况下获得预期 orderBy 的最佳方法是什么?我意识到在这个例子中,键并不完全有意义,但是假设它们是有意义的。构建自定义指令的想法似乎是一个有趣的选择,但是与原始代码相比,我的代码可能有点笨拙。

4

3 回答 3

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/

于 2013-11-07T19:48:12.577 回答
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

于 2014-02-16T16:45:56.667 回答
2

看起来您正在尝试过滤不起作用的对象。

在 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">...
于 2013-11-07T19:34:48.300 回答