Angular2 使用一个 REST 调用的多个组件
Posted
技术标签:
【中文标题】Angular2 使用一个 REST 调用的多个组件【英文标题】:Angular2 multiple components using one REST call 【发布时间】:2016-05-21 21:31:23 【问题描述】:我是 Angular2 应用程序的一部分(我们使用 beta3),问题如下:
通常我们有一个使用一些服务的组件,该服务使用一些休息调用,并且该组件显示数据。太好了。
但是,我们确实有一个页面,其中包含超过 6 个组件,所有这些组件都使用相同的 REST 调用...(后端返回所有组件的数据)并且为每个组件调用 6 次 REST 是没有意义的组件,如果我们做一些客户端缓存也会很奇怪。
是否有现成可用的东西?或者处理这种情况的模式?
谢谢。
【问题讨论】:
【参考方案1】:只需在共享服务中进行即可。如果你只在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;
【讨论】:
【参考方案2】:@Günter 的回答真的很有道理!
我不知道您的代码是否有条理,但 observable 也可以订阅多次。为此,您需要使用 share
运算符使它们“热”:
export class MyService
dataObservable:Observable;
initDataObservable()
this.dataObservable = http.get(...).map(...).share();
不使用share
操作符,对应的请求会执行多次(每次订阅一次)。
您可以注意到,一旦在 observable 上调用了一个 subscribe
方法,请求就会被执行。
【讨论】:
有趣。我的理解是,只有在订阅 之后到达的事件才会发送给订阅者。如果第一个订阅者发起的请求在下一个订阅者订阅时已经到达,他们将等待永远不会到达的事件。我认为这个share
只对像“mousemove”这样的事件有意义,在这些事件中你不在乎订阅前发生了什么。你怎么看?
是的,同意!只有在事件发生时注册的订阅者才会使用share
运算符得到通知。也就是说,我知道有一个 publishReplay
运算符,即使您稍后订阅,也可以让您接收事件。看到这个问题:***.com/questions/34947642/…。老实说,我从不使用它;-) 我想您可以在订阅时调用它...
EventEmitter
遵循这一点,因为它是一个热门的可观察对象(通过Subject
)......我的意思是你在评论中描述的机制。以上是关于Angular2 使用一个 REST 调用的多个组件的主要内容,如果未能解决你的问题,请参考以下文章
Ionic2,Angular2:如何在使用 http get 进行 REST API 服务调用时避免 CORS 问题?