Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript Angular2:可观察订阅与单一成员_Typescript_Angular_Angular2 Services - Fatal编程技术网

Typescript Angular2:可观察订阅与单一成员

Typescript Angular2:可观察订阅与单一成员,typescript,angular,angular2-services,Typescript,Angular,Angular2 Services,TL;医生: 为什么要在订阅服务中的可观察项时使用服务的局部变量 混淆原因示例: 在plunk中,您将看到我有两个组件和一个服务。这两个组件共享一个存在于该服务中的可观察组件 在服务中,我更新了一个公共变量,并将该值推送给观察者 这段代码对我来说似乎是多余的,但我在Angular2教程中看到了它 src/number.ts this.num = { num: new Date().getTime() }; this.observer.next(this.num); 我为什么要这样做呢?

TL;医生:

为什么要在订阅服务中的可观察项时使用服务的局部变量

混淆原因示例:

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

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

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

src/number.ts

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

this.observer.next(this.num);
我为什么要这样做呢?我更喜欢订阅方式,但他们似乎也这么做。我错过了什么


注意:设置间隔和NgZone垃圾仅用于演示目的。在现实生活中,这些数据将来自HTTP,HTTP将更新变量和/或推送到订阅者。因为我每秒钟都要抓紧时间,所以我还必须使用NgZone。

我想这是关于一个
可观察的
你只会在事件发出时得到一个值,但通常你希望立即得到最后一个(当前)值,然后通知更新

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

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


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

Ah!我现在明白了!使用
this.prop=123
视图,当值更改时,您会情不自禁地更新。使用observable,您可以通过在准备就绪之前不更新
next()
ing,或者通过检查订阅回调中
this.prop=123
之前的值来控制何时更新。是的,这将是另一个用例。