有可能反转Firebase列表吗?



我已经阅读了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[]>;

如果你更喜欢在模板中做,你可以看看这个答案。

相关内容

  • 没有找到相关文章

最新更新