有没有办法保留同一集合的引用,但使用 firestore 更改排序?
TLDR:这就像我想要实现的功能: https ://stackoverflow.com/a/17320018,但是由于我的数据来自 firestore,我还没有完全找到动态完成此操作的正确方法。
假设我有一个messagesService.ts包含消息集合和对消息 Observable 的引用:
messagesCollection: AngularFirestoreCollection<Message>
messages: Observable<Message[]>;
this.messagesCollection = this.db.collection('messages', ref => {
return ref.orderBy('dateCreated', 'desc');
});
this.messages= this.messagesCollection.valueChanges();
Run Code Online (Sandbox Code Playgroud)
当我将此数据弹出时,*ngFor="let message of messages | async"它会按预期在顶部显示最新消息。
我需要帮助的地方:
我希望能够单击一个按钮并更改消息的顺序(或我从 firestore 获得的数据的顺序)。例如,您可以单击一个按钮,按最喜欢、最高浏览量或最旧消息、按字母顺序排列的消息进行排序。我是否需要为要对同一集合进行排序的每一种方式都有单独的参考?这看起来很草率,有没有更干净的方法来动态地做到这一点?
最初,我尝试了这样的事情:
sortMessagesBy(field) {
this.messagesCollection = this.db.collection('messages', ref => {
return ref.orderBy(field, 'desc');
});
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,因为它似乎更改了对集合的引用,因此未更新可观察的消息。
所以接下来,我尝试了这个:
sortMessagesBy(field) {
this.messagesCollection = this.db.collection('messages', ref => {
return ref.orderBy(field, 'desc');
});
this.messages= this.messagesCollection.valueChanges();
return this.messages;
}
Run Code Online (Sandbox Code Playgroud)
但这似乎创建了一个新的 this.messages 对象,它使 ngFor 重新渲染整个页面并且看起来非常草率(即使使用 …
javascript firebase angularfire2 angular google-cloud-firestore
如何使用新的 Office.js api 将简单图像添加到 Excel 电子表格上的特定位置?