3

Ich habe jede Frage zu SO darüber gelesen und ich habe immer noch keine Antwort darauf gefunden. Also markieren Sie das nicht als Duplikat.Ist es möglich, eine Firebase-Liste umzukehren?

Ich verwende AngularFire mit Angular 2 und Typescript. Ich verwende FirebaseListObservable, um eine Liste der 24 neuesten Datensätze von einem Endpunkt abzurufen. Hier ist mein Code ist:

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 
     } 
    }); 
    } 
} 

Dies gibt eine Liste der 24 neuesten Geschichten, wie erwartet, aber wenn ich sie auf der Seite machen mit:

<p *ngFor="let story of stories | async">{{ story.title }}</p> 

Es zeigt die älteste Geschichte auf der Oberseite, und das Neueste auf der Unterseite. Ich verstehe, warum das so ist, und ich behaupte nicht, dass es ein Problem ist, aber wie würde ich das rückgängig machen? Ich würde gerne in der Lage sein, dies in der Abfrage umzukehren, aber wenn das nicht möglich ist, wäre ich offen dafür, es irgendwie im Rendering umzukehren.

Was auch immer Ihre Antwort ist, bitte verweisen Sie nicht nur auf die Dokumentation. Es gibt keine Dokumentation für AngularFire, die dies vollständig erklärt. Ich habe jedes Wort gelesen. Bitte geben Sie echten Arbeitscode an.

Eine Lösung, die ich jedoch absolut nicht akzeptieren werde, ist das Speichern eines negativen Datums in den Datensätzen zum Zeitpunkt der Erstellung und das anschließende Sortieren darauf. Das ist die schlechteste Lösung, die ich jemals gehört habe, und ein echtes Datenbanksystem würde es Ihnen ermöglichen, dies in der Abfrage zu tun. Also bitte nicht einmal vorschlagen.

Wenn Sie irgendwelche Ideen haben, würde ich es sehr zu schätzen wissen. Ich würde es hassen, ein anderes Produkt verwenden zu müssen, weil ich Firebase liebe.

Antwort

13

Soweit ich weiß, sind die Firebase-Abfragen immer in aufsteigender Reihenfolge.

Sie können jedoch die Reihenfolge der wiedergegebenen Liste in umgekehrter Reihenfolge map Operator mit dem Array umkehren, die von der AngularFire2 beobachtbaren emittiert hat:

import "rxjs/add/operator/map"; 

... 

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

Wenn Sie es vorziehen würde es in der Vorlage zu tun, Sie Schauen Sie sich this answer an.

+0

Ich mag den ersten Ansatz, aber es führt zu einem Fehler "Property" map 'existiert nicht auf Typ' FirebaseListObservable ''. –

+0

Ich denke, das Problem ist, dass FirebaseListObservable kein Array ist, daher können Sie keine Array-ähnlichen Operationen ausführen. –

+0

Es wird funktionieren; Der emittierte Wert ist ein Array. Es ist nur ein TypeScript/RxJS-Problem. Es ist wahrscheinlich, dass Sie den 'map'-Operator importieren müssen, um TypeScript zu beschwichtigen. Ich habe die Antwort aktualisiert. – cartant

Verwandte Themen