Angular2:可观察订阅与单例成员

Angular2: Observable subscription vs singleton member

TL;DR:

https://plnkr.co/edit/QP5skRU1MJ3ZoOtlA15I?p=preview

为什么要使用服务的局部变量而不是订阅该服务中的可观察对象?

造成混淆的例子:

在 plunk 中,您会看到我有两个组件和一个服务。这两个组件共享一个存在于该服务中的 Observable。

在服务中,我更新了一个 public 变量并将该值推送给观察者。

这段代码对我来说似乎是多余的,但我在 Angular2 教程中看到了它。

src/number.ts

this.num = {
  num: new Date().getTime()
};

this.observer.next(this.num);

我为什么要做其中之一?我更喜欢订阅方式,但他们似乎做同样的事情。我错过了什么?

注意: setInterval 和 NgZone 垃圾仅用于演示目的。在现实生活中,此数据将来自 HTTP,它将更新变量 and/or 推送给订阅者。因为我只是抢时间每一秒,所以我也不得不使用NgZone。

我想这是关于 Observable 的,你只会在事件发出时获得一个值,但通常你希望立即获得最后一个(当前)值,并在稍后收到更新通知。

您可以使用 BehaviorSubject 立即再次向新订阅者发出最后发出的值,或者如果您不太熟悉 Rx,您可能会使用问题中提到的模式。这让你

this.prop = this.service.num; this.service.observable.subscribe(val => this.prop = val);

立即获取最后一个值并在它们出现时使用可观察值进行更新。