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