J'ai ci-dessous le code dans une application angulaire qui utilise AngularFire2.
Manuscrit:
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>
Ce code récupère et lie les données comme prévu (supprime les éléments lorsque la collection est mise à jour), je souhaite maintenant trier la collection en fonction d'une colonne donnée. J'ai essayé d'utiliser la clause firebase orderBy , mais je n'arrive pas à comprendre comment l'utiliser avec la méthode snapShotChanges()
.
Ce qui suit devrait fonctionner pour votre cas d'utilisation:
this.booksCollectionRef = db.collection<Book>('books', ref => ref.orderBy('order field'));
Consultez la documentation de AngularFirestore pour plus d'informations sur ce sujet.
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 };
});
});
Vous n’êtes pas sûr d’Angular Fire, mais vous pouvez essayer d’utiliser directement les bibliothèques Firebase Firestore.
Le code suivant fonctionne pour moi:
someCollectionRef
.orderBy('columnName')
.onSnapshot((snapshot) => {
snapshot.docChanges.forEach(function (change) {
...doStuff