0

我有一个具有以下结构(三个组件)的系统:

Grand-Father -> Father -> Children

还有一个服务:Service上面有一个 EventEmitter。

在所有三个组件上,我将服务设置为提供者,将其添加到构造函数并订阅事件发射器:

this.subscription = this._service.eemiter.subscribe(data=> this.init(data));

问题是,它只在从触发事件的服务调用方法的组件上被触发。我的猜测是,通过以这种方式定义它们,每个组件都会获得不同的Service而不是相同的,因此该事件仅由调用触发方法的组件看到。

为了让所有三个组件能够订阅相同的服务并实际捕获事件,我应该进行什么设计?

4

1 回答 1

2

如果将它添加到每个组件的提供者中,每个组件都会获得自己的服务实例(不共享)。
将其添加到bootstrap(AppComponent, [MySharedService])或添加到公共父元素。
提供者列表中的父元素MyService是服务实例的根范围。所有孩子都获得相同的实例(除了中间的另一个组件也在MyService提供者列表中)。

于 2016-02-19T10:36:49.103 回答