4

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

通常我们有一个使用一些服务的组件,该服务使用一些休息调用,并且该组件显示数据。伟大的。

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

有什么开箱即用的东西吗?还是处理这种情况的模式?

谢谢。

4

2 回答 2

4

只需在共享服务中进行即可。如果您仅在bootstrap(..., [OtherProviders, HTTP_PROVIDERS, MyService])每个组件中添加它,则会注入相同的实例。将数据存储在服务中,每个组件都可以访问它

export class MyComponent {
  constructor(private dataService:MyService) {
    dataService.getData().subscribe(data => { this.data = data; });
  }
}
export class MyService {
  getData() {
    if(!this.data) {
      return http.get(...).map(...).subscribe(data => { this.data = data;});
    } 
    return this.data;
  }
}
于 2016-02-11T08:00:21.923 回答
1

@Günter 的回答真的很有意义!

我不知道您的代码是有组织的,但 observable 也可以订阅多次。为此,您需要使用share运算符使它们“热”:

export class MyService {
  dataObservable:Observable;

  initDataObservable() {
    this.dataObservable = http.get(...).map(...).share();
  } 
}

在不使用share操作符的情况下,相应的请求将执行多次(每次订阅一次)。

您会注意到,一旦subscribe在 observable 上调用一种方法,请求就会被执行。

于 2016-02-11T08:56:29.147 回答