我有一个具有以下结构的系统(三个组件):
Grand-Father -> Father -> Children
服务:Service
,上面有一个EventEmitter。
在所有三个组件上,我将服务设置为提供者,将其添加到构造函数并订阅了eventemitter:
this.subscription = this._service.eemiter.subscribe(data=> this.init(data));
问题是,它只会在从触发事件的服务调用该方法的组件上触发。我的猜测是,通过这种方式定义它们,每个组件得到一个不同的Service
而不是相同的组件,因此事件只能由调用触发方法的组件看到。
为了让所有三个组件能够订阅同一服务并实际捕获事件,我应该采用什么样的设计?
答案 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
)。