Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 按日期排序异步对象_Angular_Firebase_Firebase Realtime Database_Angularfire2_Angular Pipe - Fatal编程技术网

Angular 按日期排序异步对象

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

我有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>

{{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()