【问题标题】:How do I get angularFire objects to orderBy with ngRepeat?如何使用 ngRepeat 获取 angularFire 对象?
【发布时间】:2013-11-07 19:00:03
【问题描述】:

我的 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 获得预期订单的最佳方式是什么?我意识到在这个例子中,键并不完全有意义,但是假设它们是有意义的。构建自定义指令的想法似乎是一个有趣的选择,但是与原始代码相比,我的代码可能有点笨拙。

【问题讨论】:

    标签: angularjs angularfire


    【解决方案1】:

    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/

    【讨论】:

    • toArray 过滤器完美运行。也许将ng-click="cpSelect(pid)" 编辑为ng-click="cpSelect(p.$key)" 以供后代使用。
    • 不值得在 1.2.x 中没有这样的过滤器,但是 angularFire 提供的 orderByPriority 可以完成这项工作。
    • @finishingmove 不知道你在说什么...我说过滤器是有角度的吗?只需复制该票证中的代码并使用它。
    【解决方案2】:

    您可以使用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

    【讨论】:

      【解决方案3】:

      看起来您正试图过滤一个不起作用的对象。

      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">...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-03
        • 2016-03-01
        • 2015-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多