小编cs_*_*pil的帖子

Firestore:如何重新订购我已经参考过的系列?

有没有办法保留同一集合的引用,但使用 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

4
推荐指数
2
解决办法
5484
查看次数

Office.js 插件:在 Excel 中插入图像/图片 (Office 365)

如何使用新的 Office.js api 将简单图像添加到 Excel 电子表格上的特定位置?

javascript office-addins office-js

3
推荐指数
1
解决办法
3045
查看次数