Angular Firestore 查询中的 get() 和 valueChanges() 有什么区别?

Dan*_* T. 11 javascript firebase typescript angular google-cloud-firestore

正如标题所说,我想问一下在 Angular Firestore 中执行查询时 get() 和 valueChanges() 之间有什么区别(如果有的话)。

在读取/成本方面,两者之间是否也有任何优点/缺点?

AJT*_*T82 22

valueChangesget(),之间的主要区别在于,使用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
})
Run Code Online (Sandbox Code Playgroud)

当然,您可以使用例如调用文档valueChanges并附加一个pipe(take(1)),但get()在这种情况下非常方便。


Pet*_*dad 8

valueChanges()在 angularfire2 库中使用。根据文档

返回文档数据的 Observable。所有快照元数据都被剥离。此方法仅提供数据。

如果您正在做一个角度项目,那么您可以使用angularfire2包含该方法的库valueChanges()


get() 也用于检索单个文档的内容。