Angular2使用一个REST调用实现多个组件

Angular2使用一个REST调用实现多个组件,rest,angular,angular2-directives,angular2-services,Rest,Angular,Angular2 Directives,Angular2 Services,我是Angular2应用程序的一部分(我们使用beta3),问题如下: 通常我们有一个组件,它使用一些服务,使用一些rest调用,该组件显示数据。太好了 然而,我们确实有一个页面,其中包含6个以上的组件,所有组件都使用相同的REST调用…(后端返回所有组件的数据),为每个组件调用6次REST是没有意义的,如果我们进行一些客户端缓存,这也会很奇怪 有现成的吗?还是处理这种情况的模式 谢谢。只要在共享服务中完成即可。如果只在引导(…,[OtherProviders,HTTP\U PROVIDERS,

我是Angular2应用程序的一部分(我们使用beta3),问题如下:

通常我们有一个组件,它使用一些服务,使用一些rest调用,该组件显示数据。太好了

然而,我们确实有一个页面,其中包含6个以上的组件,所有组件都使用相同的REST调用…(后端返回所有组件的数据),为每个组件调用6次REST是没有意义的,如果我们进行一些客户端缓存,这也会很奇怪

有现成的吗?还是处理这种情况的模式


谢谢。

只要在共享服务中完成即可。如果只在
引导(…,[OtherProviders,HTTP\U PROVIDERS,MyService])中添加它,
每个组件将被注入相同的实例。将数据存储在服务中,每个组件都可以访问它

导出类MyComponent{
构造函数(私有数据服务:MyService){
dataService.getData().subscribe(数据=>{this.data=data;});
}
}
导出类MyService{
getData(){
如果(!this.data){
返回http.get(…).map(…).subscribe(数据=>{this.data=data;});
} 
返回此.data;
}
}

Günter的答案真的很有道理

我不知道你的代码是有组织的,但observable也可以订阅几次。要做到这一点,您需要使用
share
操作符使它们“热”:

export class MyService {
  dataObservable:Observable;

  initDataObservable() {
    this.dataObservable = http.get(...).map(...).share();
  } 
}
如果不使用
share
操作符,相应的请求将执行多次(每个订阅一次)


您可以注意到,一旦对observable调用了一个
subscribe
方法,就会执行请求。

。我的理解是,只有在订阅后到达的事件才会发送给订阅方。如果第一个订阅者发起的请求在下一个订阅者订阅时已经到达,那么他们只会等待事件永远不会到达。我认为这种
共享
只有在“mousemove”这样的活动中才有意义,因为在订阅之前,你根本不在乎发生了什么。你觉得怎么样?是的,同意!只有在事件发生时注册的订户才会使用
share
操作符得到通知。也就是说,我知道有一个
publishReplay
运营商允许您接收事件,即使您稍后订阅。请参见以下问题:。老实说,我从来没用过;-)我想你可以在订阅时调用它…
EventEmitter
紧随其后,因为它是一个热门的可观察对象(通过
Subject
)。。。我指的是你在评论中描述的机制。