我是 Angular2 应用程序的一部分(我们使用 beta3),问题如下:
通常我们有一个使用一些服务的组件,该服务使用一些休息调用,并且该组件显示数据。伟大的。
但是,我们确实有一个页面,其中包含 6 个以上的组件,所有这些组件都使用相同的 REST 调用...(后端返回所有组件的数据),并且为每个组件调用 6 次 REST 也是没有意义的如果我们做一些客户端缓存会很奇怪。
有什么开箱即用的东西吗?还是处理这种情况的模式?
谢谢。
我是 Angular2 应用程序的一部分(我们使用 beta3),问题如下:
通常我们有一个使用一些服务的组件,该服务使用一些休息调用,并且该组件显示数据。伟大的。
但是,我们确实有一个页面,其中包含 6 个以上的组件,所有这些组件都使用相同的 REST 调用...(后端返回所有组件的数据),并且为每个组件调用 6 次 REST 也是没有意义的如果我们做一些客户端缓存会很奇怪。
有什么开箱即用的东西吗?还是处理这种情况的模式?
谢谢。
只需在共享服务中进行即可。如果您仅在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;
}
}
@Günter 的回答真的很有意义!
我不知道您的代码是有组织的,但 observable 也可以订阅多次。为此,您需要使用share
运算符使它们“热”:
export class MyService {
dataObservable:Observable;
initDataObservable() {
this.dataObservable = http.get(...).map(...).share();
}
}
在不使用share
操作符的情况下,相应的请求将执行多次(每次订阅一次)。
您会注意到,一旦subscribe
在 observable 上调用一种方法,请求就会被执行。