Angular 按日期排序异步对象
我有Angular 5+Firebase应用程序,我从Firebase列表中获取项目,并使用*ngFor将它们设置到视图中Angular 按日期排序异步对象,angular,firebase,firebase-realtime-database,angularfire2,angular-pipe,Angular,Firebase,Firebase Realtime Database,Angularfire2,Angular Pipe,我有Angular 5+Firebase应用程序,我从Firebase列表中获取项目,并使用*ngFor将它们设置到视图中 <a routerLink="post/{{post.url}}" *ngFor="let post of (posts | async)"> <h2>{{ post?.title }}</h2> <span>{{ post?.date }}</span> </a> {{
<a routerLink="post/{{post.url}}" *ngFor="let post of (posts | async)">
<h2>{{ post?.title }}</h2>
<span>{{ post?.date }}</span>
</a>
{{post?.title}
{{post?.date}
我的每个项目都有一个“日期”字段,格式为“dd.mm.yyyy”。如何将它们设置为按日期排序的组件视图(从最新到较旧)
如何从Firebase获取帖子:
getPosts(): Observable<any[]> {
return this.db.list('posts').snapshotChanges().map(changes => {
return changes.map(c => ({
key: c.payload.key,
...c.payload.val() }));
});
}
getPosts():可观察{
返回此.db.list('posts').snapshotChanges().map(changes=>{
返回changes.map(c=>({
键:c.payload.key,
…c.payload.val()});
});
}
您的日期为“dd.mm.yyyy”
,这是一种天生难以排序的日期格式。使用这种格式,您必须在客户机上进行排序/筛选
如果以ISO-8859格式(例如,yyyy-mm-dd
)存储日期,则可以让Firebase通过以下方式处理排序/过滤:
this.db.list('posts', ref => ref.orderByChild('date'))
另见
请注意,这将只按升序对项目进行排序,因此从最旧到最新。如果您想让它们下降,您必须在客户端中反转,或者存储一个反转的值。在后一种情况下,我建议存储反转的时间戳,而不是字符串,例如
"negativeTimestamp": -1523753371440
有关这方面的更多信息,请参见我的回答中的链接,您可能可以在收到
帖子时对其进行排序。我们可以看到代码吗?正如@ConnorsFan所说的,您可以从firebase查询并获得排序数据,如果没有,您还可以映射可观测数据并在服务中排序,然后再订阅template@ConnorsFan我向问题添加了代码我不知道firebase,但您可以尝试以下语法:this.db.list('posts',{query:{orderByChild:'date'}}).map((arr)=>{return arr.reverse();}).snapshotChanges()…
。可以通过orderByChild
指定“desc”;如果是这样,则无需调用reverse()
。