【发布时间】:2019-01-16 12:50:50
【问题描述】:
由于我正在研究 angular / firebase,我对在 Angular 2+ 上很好地使用 Rxjs 和 firebase 感到有点困惑,尤其是使用带有 firebase.on/once 的 Observable/Subject。我没有找到很好的例子。
首先我认为我对每一个的理解都还可以(我感到困惑的是在组合它们时),不确定我的解释:
- Subject:一个数据生产者和一个数据消费者,订阅这个subject的observables会像“依赖”一样
- Observable:数据将更加“独立”的数据生产者
- firebase.database().ref(...).on...:每次数据更改时都会调用查询
- firebase.database().ref(...).once...:查询调用一次
我看到的一些问题/示例(这让我很困惑):
- 在 Observable 中使用“firebase.database().ref(..).once...”(或 .on):如果查询已经为我们提供了我们需要的东西,那么在这里使用 Observable 有什么意义?
- 什么时候最好使用 Subject 而不是 Observable + setter 来更新“我自己”的数据?
- 假设您有 /books 并且每本书都有一些属性(id、作者、页面、标题...)(在您的代码中它将存储在 Book[] 中)并且您想要更新例如作者,是吗最好只更新此属性或使用 firebase (firebase.database().ref('/books').set(this.books);) 更新所有书籍?我不知道为什么,但我觉得更新属性比更新所有对象更安全,但我经常看到更新所有对象,最好的方法是什么?
- (编辑)将 firebase.database().on... 与 Subjects 一起使用有什么意义?一次会给出相同的结果,并且会更优化(更少的查询)不是吗?
【问题讨论】:
-
您应该考虑使用angularfire2,因为它可以让您使用 Observables 进行所有操作,因此您不必担心所有这些。基本上,
get调用将返回一个 observable,每当您调用get的引用更新时,它都会发出一个新值。 -
@Supamiu 我已经尝试过 angularfire,但在键入对象时遇到了一些问题......这并不能解决我的困惑(我认为在使用“工具”之前理解概念是件好事)但是你说得对,我应该坚持并用 angularfire 训练自己!