angular - Använda AngularFirestore Collection orderBy med snapShotChanges-metoden


Jag har nedanstående kod i en Angular-applikation som använder AngularFire2.

TypeScript:

constructor(db: AngularFirestore) {
    this.booksCollectionRef = db.collection<Book>('books');

    this.books = this.booksCollectionRef.snapshotChanges().map(actions => {
        return actions.map(action => {
            const data = action.payload.doc.data() as Book;
            const id = action.payload.doc.id;
            return { id, ...data };
        });
    });
}

HTML :

<md-list>
    <md-list-item *ngFor="let book of books | async">
        <h4 md-line>{{book.name}}</h4>
    </md-list-item>
</md-list>

Denna kod hämtar och binder data som förväntat (tar bort objekt när samlingen uppdateras), nu vill jag sortera samlingen efter en given kolumn. Jag försökte använda Firebase orderBy-klausulen, men jag kan inte lista ut hur man använder den med snapShotChanges()-metoden.

Svar #1

Följande bör fungera för ditt användningsfall:

this.booksCollectionRef = db.collection<Book>('books', ref => ref.orderBy('order field'));

Ta en titt på dokumentationen för AngularFirestore för mer information om detta ämne.

Svar #2

this.announcementCollectionRef = afs.collection<Announcement>('announcements', ref => ref.orderBy('createdAt', 'desc'));
this.announcements = this.announcementCollectionRef.snapshotChanges().map(actions => {
    return actions.map(a => {
        const data = a.payload.doc.data() as AnnouncementId;
        const id = a.payload.doc.id;
        return { id, ...data };
    });
});

Relaterade artiklar