我已经阅读了SO上关于这个的每一个问题,我仍然没有找到这个问题的答案。所以不要把它标记为重复。
我在Angular 2和Typescript中使用AngularFire。我使用FirebaseListObservable
从端点提取24条最新记录的列表。下面是我的代码:
import { Component } from '@angular/core';
import { AngularFire, FirebaseListObservable } from 'angularfire2';
@Component({
selector: 'story-list',
templateUrl: './story-list.component.html',
styleUrls: ['./story-list.component.scss']
})
export class StoryListComponent {
stories: FirebaseListObservable<any[]>;
constructor(af: AngularFire) {
this.stories = af.database.list('/stories', {
query: {
limitToLast: 24
}
});
}
}
如预期的那样,这将返回24篇最新报道的列表,但是当我使用:
在页面上呈现它们时:<p *ngFor="let story of stories | async">{{ story.title }}</p>
上面是最古老的故事,下面是最新的故事。我明白为什么会这样,我并不是说这是个问题,但我该如何扭转这种局面呢?我希望能够在查询中逆转这一点,但如果这是不可能的,我会以某种方式在渲染中逆转它。
无论你的答案是什么,请不要只是链接到文档。没有任何关于AngularFire的文档可以完全解释这一点。我每个字都读过了。请提供实际工作代码
但是,我绝对不会接受的一个解决方案是在创建时在记录中存储负日期,然后根据该日期进行排序。这是我听过的最糟糕的解决方案,而真正的数据库系统会允许您在查询中这样做。所以请不要再提了。 如果你有任何想法,我将不胜感激。我不愿意使用其他产品,因为我喜欢Firebase。据我所知,Firebase查询总是按升序排列的。
但是,您可以使用map
操作符反转呈现列表的顺序,以反转由AngularFire2
可观察对象发出的数组:
import "rxjs/add/operator/map";
...
this.stories = af.database.list('/stories', {
query: {
limitToLast: 24
}
}).map((array) => array.reverse()) as FirebaseListObservable<any[]>;
如果你更喜欢在模板中做,你可以看看这个答案。