web-dev-qa-db-ja.com

snapShotChangesメソッドでAngularFirestore Collection orderByを使用する

私はAngularFire2を使用しているAngularアプリケーションのコードの下にあります.

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>
_

このコードは、期待どおりにデータを取得してバインドします(コレクションが更新されるとアイテムを削除します)。指定された列でコレクションを並べ替えます。 firebase orderBy 句を使用しようとしましたが、snapShotChanges()メソッドで使用する方法がわかりません。

14
Nalaka526

次は、ユースケースで機能するはずです。

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

このトピックの詳細については、 AngularFirestoreのドキュメント をご覧ください。

28
alex kucksdorf
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 };
    });
});
5
Clayton Allen

Angular Fireについてはわかりませんが、Firebase Firestoreライブラリを直接使用してみてください。

次のコードは私のために機能します:

someCollectionRef
.orderBy('columnName')
.onSnapshot((snapshot) => {
snapshot.docChanges.forEach(function (change) {
...doStuff
0
sgt_lagrange