我需要做的事实上是获得最后50名的前十名。或者字面上限制到最后(50)然后是orderByChild。
现在这段代码可以很好地获取我的整个列表中的前50个(数千个)并将其反转以获得正确的显示顺序,但它会对整个列表进行排序并返回前50个。我需要排序顶部过去50个参赛作品中的10个。
export class DisplayComponent{
trackFbObjects = (idx, obj) => obj.$key;
fml: Observable<any>
constructor(db: AngularFireDatabase) {
this.fml = db.list('vertigo', ref => ref.limitToLast(50).orderByChild("totalvote")).valueChanges()
.map((Array) => Array.reverse());
}
}
然后我将使用NgFor和NgIf将50中的10个拉出来:
<ul *ngFor="let item of (fml | async); let i = index; trackBy:trackFbObjects">
<li *ngIf="i<10"> {{ item.title }} </li></ul>
我想也许可以只执行limitToLast(50),然后在Array.reverse()期间可以通过&#34; totalvote&#34;?对它进行排序。我不知道,但我找不到可行的解决方案,任何帮助都会受到赞赏。
如果有帮助,我的条目看起来像这样:
vertigo
-L9X0AiwPemOIepVm5gf
-totalvote: "333"
-title: "Smile."
答案 0 :(得分:0)
如果将来有人需要这个,我可以在我的查询之外对我的列表进行排序,如下所示:
constructor(db: AngularFireDatabase) {
this.fml = db.list('vertigo', ref => ref.limitToLast(50)).valueChanges()
.map((Array) => Array.sort((a, b) => b['totalvote'] - a['totalvote']));
}