【问题标题】:How do you sort an AngularFire collection?你如何对 AngularFire 集合进行排序?
【发布时间】:2013-11-20 23:51:07
【问题描述】:
  $scope.items = [];
  var ref = new Firebase("https://****.firebaseio.com/");
  var query = ref.limit(5);

  angularFire(query, $scope, "items");

<div ng-repeat="item in items" >
<span>{{item.title}}</span>
</div>

您如何按“标题”对这些内容进行排序?我见过几个类似的问题,但解决方案似乎不起作用,至少在这种情况下是这样。

【问题讨论】:

    标签: javascript angularjs firebase angularfire


    【解决方案1】:

    如果$scope.items 是一个对象数组(如$scope.items = [] 所暗示的那样),您将能够使用角度orderBy filter

    <!-- This example will NOT work with Firebase -->
    <div ng-repeat="item in items | orderBy:'title'">
      <span>{{item.title}}</span>
    </div>
    

    但是,将items 设置为数组会产生误导,因为您实际上是将“项目”存储(和检索)为键值对列表,不是 一个数组。在 javascript 中对对象进行排序通常更复杂,但实现您想要的一种方法是自定义过滤器:

    app.filter('orderObjectBy', function(){
      return function(input, attribute) {
        if (!angular.isObject(input)) return input;
    
        var array = [];
        for(var objectKey in input) {
          array.push(input[objectKey]);
        }
    
        function compare(a,b) {
          if (a[attribute] < b[attribute])
            return -1;
          if (a[attribute] > b[attribute])
            return 1;
          return 0;
        }
    
        array.sort(compare);
        return array;
      }
    });
    

    现在您可以使用过滤器按您的任何item 属性进行排序:

    <div ng-repeat="item in items | orderObjectBy:'title'">
      <span>{{item.title}}</span>
    </div>
    

    这里有一个fiddle 来演示。正如@bennlich 下面指出的那样,您的自定义过滤器可能会在数组转换时停止,然后您可以按照here 的建议使用正常的 orderBy 过滤器。

    为了彻底,我应该注意,您还可以使用 Firebase priorities 对“服务器端”进行排序。

    【讨论】:

    • 不,这似乎没有任何作用,当我给它一个无意义的值时,我什至没有收到错误。
    • 您是否将items 存储为firebase 中的数组?
    • 是的,使用 Firebase PHP 库:github.com/ktamas77/firebase-php $story = array( 'title' => $title, 'id' => $id ); $response = $fb->set($storyPath, $story);
    • 我不熟悉 php 库,但我猜你实际上并没有将 stories 存储为具有“可排序”属性的故事对象数组。如果您可以发布屏幕截图或伪造数据的某些表示形式,则更容易分辨。如果您无法使用普通的角度过滤器对其进行排序,则必须使用 write your own 或使用 firebase priorities 对其进行排序。
    • 啊,我不认为我知道如何给他们可排序的属性,我不认为 Firebase PHP 可以做 setpriority,这是一个镜头:imgur.com/QZ7tkpQ 编辑:更好的镜头:imgur.com/q4DcRvX
    猜你喜欢
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 2021-02-24
    相关资源
    最近更新 更多