![](/img/trans.png)
[英]How do I copy a collection into another, as a sub collection? Angularfire/ Angular/ Firestore
[英]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過濾器,如此處所示 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.