Можно ли изменить список огневых баз?
Я прочитал каждый вопрос на 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 ответ:
Насколько мне известно, запросы Firebase всегда находятся в порядке возрастания.
Однако вы можете изменить порядок отображаемого списка, используя оператор
map
, чтобы изменить массив, который испускается наблюдаемымAngularFire2
:import "rxjs/add/operator/map"; ... this.stories = af.database.list('/stories', { query: { limitToLast: 24 } }).map((array) => array.reverse()) as FirebaseListObservable<any[]>;
Если вы предпочитаете делать это в шаблоне, вы можете посмотреть на этот ответ.