Можно ли изменить список огневых баз?


Я прочитал каждый вопрос на SO об этом, и я до сих пор не нашел ответа на этот вопрос. Так что не помечайте это как дубликат.

Я использую 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.
1 4

1 ответ:

Насколько мне известно, запросы Firebase всегда находятся в порядке возрастания.

Однако вы можете изменить порядок отображаемого списка, используя оператор map, чтобы изменить массив, который испускается наблюдаемым AngularFire2:

import "rxjs/add/operator/map";

...

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

Если вы предпочитаете делать это в шаблоне, вы можете посмотреть на этот ответ.