Angular2事件订阅没有解雇?

时间:2016-02-19 10:24:31

标签: events angular angular2-services

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

Grand-Father -> Father -> Children

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

如果将其添加到每个组件的提供者,则每个组件都会获得自己的服务实例(不共享) 将其添加到foreach (range(0, 1000) as $i) { $options = array("readPreference" => MongoClient::RP_SECONDARY_PREFERRED); $pos_m = new MongoClient(MONGO_POSITION_V5_URI, $options); $db_pos = $pos_m->selectDB(array_pop((explode("/", MONGO_POSITION_V5_URI)))); $col_pos = $db_pos->selectCollection(COL_POSITION_INDICATORS_BY_CITY); $position_data = $col_pos->findOne(array("position_id" => "id")); } 或公共父元素 提供者列表中具有bootstrap(AppComponent, [MySharedService])的父元素是服务实例的根范围。所有子节点都获得相同的实例(除了提供者列表中的另一个组件之外还有MyService)。