我正在通过角度应用程序中的@angular/fire
使用firebase javascript sdk。
使用angularfire Collection#stateChanges()
,我想只是订阅集合的状态更改(基于描述)。即最初订阅时,不会返回任何内容。但是,我发现stateChanges()立即返回集合中的所有内容,然后继续返回状态更改。
是否可以公正订阅未来的状态更改,而不是“重放”过去的更改(直接使用firebase-js-sdk
还是通过@angular/fire
)?
例如,如果您已经下载了集合的当前状态的副本,那么您只需要订阅集合更新,就不想重新下载集合状态。
感谢您的帮助!
答案 0 :(得分:0)
您可能正在寻找的是集合上的stateChanges方法。 从文档中:
您为什么要使用它? -以上方法返回一个按查询顺序排序的同步数组。 stateChanges()会在发生更改时发出更改,而不是同步查询顺序。这对于ngrx集成非常有效,因为您可以在化简器方法中构建自己的数据结构。
还有一个使用@angular/fire
的代码示例:
this.angularFirestore
.collection('my-collection')
.stateChanges(['added', 'removed', updated']) // double check the state change references, these were assumed
.pipe(...);
答案 1 :(得分:0)
目前,firebase不支持仅 订阅查询更改。订阅查询时,还必须立即下载所有相关文档(请参阅firebase-js-sdk存储库中的问题#1551)。
如上所述,您可以通过在文档中添加updatedAt
属性并在updatedAt > now
中查询所有文档来伪造此功能。这会使您订阅将来的更改。
这种解决方法的局限性在于,Firestore仅支持在查询的单个字段上使用不等式过滤器(>=
,<
等),因此在{ {1}}字段可能有问题。
答案 2 :(得分:0)
以下方法是我用于类似案例的方法。 我有用户,组和组中的用户请求。
登录后,我获得了所需的数据(所有数据一目了然。)
但是对于已登录的用户,我需要预订该组请求的任何插入,删除或版本(不仅限于更新..)。
因此,我创建了一个更改请求的集合。 (groupRequestsChanged)
我已订阅
collection('groupRequestsChanged').doc(group-id-here...).valueChanged().subscribe()
这种方法在某些情况下很有用。