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);
立即获取最后一个值并在它们出现时使用可观察值进行更新。
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);
立即获取最后一个值并在它们出现时使用可观察值进行更新。