Angular Firestore 查询中的 get() 和 valueChanges() 有啥区别? [关闭]
Posted
技术标签:
【中文标题】Angular Firestore 查询中的 get() 和 valueChanges() 有啥区别? [关闭]【英文标题】:What is the difference between get() and valueChanges() in Angular Firestore query? [closed]Angular Firestore 查询中的 get() 和 valueChanges() 有什么区别? [关闭] 【发布时间】:2020-01-28 22:43:09 【问题描述】:正如标题所说,我想问一下在 Angular Firestore 中执行查询时 get() 和 valueChanges() 之间有什么区别(如果有的话)。
两者之间在读取/成本方面是否也有任何优势/劣势?
【问题讨论】:
【参考方案1】:valueChanges
和get()
之间的主要区别在于,使用get()
,您只能获得一次数据,而valueChanges
(和snapshotChanges
)会在任何时候自动触发链接到您正在收听的文档/集合的数据库中的某些更改。
后者是 firebase 实时数据库的优点,因为您不需要轮询或其他任何事情来获取最新数据,firebase 会处理所有这些!
在我看来,get()
很有用,例如,当您更新集合中的文档,然后在更新后立即想对该文档执行某些操作,并且只获取一次,例如:
const docRef= this.afs.collection(colId).doc(docId).set(...)
docRef.get().pipe(
map(doc => doc.data())
)
.subscribe(data =>
// do stuff with document
)
当然,您可以使用例如valueChanges
调用文档并附加pipe(take(1))
,但get()
在这种情况下非常方便。
【讨论】:
【参考方案2】:valueChanges()
在库 angularfire2 中使用。根据docs:
返回一个文档数据的 Observable。所有快照元数据都被剥离。此方法仅提供数据。
如果你正在做一个角度项目,那么你可以使用库angularfire2
,其中包含方法valueChanges()
get()
也用于检索单个文档的内容。
【讨论】:
以上是关于Angular Firestore 查询中的 get() 和 valueChanges() 有啥区别? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在 Firestore 中使用 Angular 删除集合中的文档
如何组合两个 Redux Firebase Cloud Firestore 查询?
从Angular TypeScript中来自firestore的数据中获取未定义