簡體   English   中英

你如何對AngularFire系列進行排序?

[英]How do you sort an AngularFire collection?

  $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>

你會如何通過“頭銜”對它們進行排序? 我已經看到了幾個類似的問題,但解決方案似乎不起作用,至少在這種情況下。

如果$scope.items是一個對象數組(由$scope.items = []暗示),你可以使用angular orderBy 過濾器

<!-- 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>

這是一個小提琴演示。 正如下面提到的@bennlich,您的自定義過濾器可能會在陣列轉換時停止,然后您可以使用正常的orderBy過濾器,如此處所示

為了徹底,我應該注意,您還可以使用Firebase 優先級對“服務器端”進行排序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM