【问题标题】:Is it possible to reverse a Firebase list?是否可以反转 Firebase 列表?
【发布时间】:2017-03-10 15:57:37
【问题描述】:

我已经阅读了关于这个的所有问题,但我仍然没有找到答案。所以不要将此标记为重复。

我将 AngularFire 与 Angular 2 和 Typescript 一起使用。我正在使用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。

【问题讨论】:

    标签: javascript angularjs firebase firebase-realtime-database angularfire


    【解决方案1】:

    据我所知,Firebase 查询始终按升序排列。

    但是,您可以使用 map 运算符反转呈现列表的顺序,以反转由 AngularFire2 observable 发出的数组:

    import "rxjs/add/operator/map";
    
    ...
    
    this.stories = af.database.list('/stories', {
      query: {
        limitToLast: 24
      }
    }).map((array) => array.reverse()) as FirebaseListObservable<any[]>;
    

    如果您希望在模板中执行此操作,可以查看this answer

    【讨论】:

    • 我喜欢第一种方法,但它会导致错误Property 'map' does not exist on type 'FirebaseListObservable&lt;any[]&gt;'
    • 我认为问题在于 FirebaseListObservable 不是数组,因此您无法对其执行类似数组的操作。
    • 它会起作用的;发出的值是一个数组。这只是一个 TypeScript/RxJS 问题。您可能需要导入 map 运算符来安抚 TypeScript。我已经更新了答案。
    • 现在我得到错误:Type 'Observable&lt;any[]&gt;' is not assignable to type 'FirebaseListObservable&lt;any[]&gt;'. Property '_ref' is missing in type 'Observable&lt;any[]&gt;'.
    • 更多打字稿。它与 RxJS 用于链接运算符的 lift 函数配合得不是很好。为答案添加了演员表。
    猜你喜欢
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多