【发布时间】:2018-01-03 05:32:38
【问题描述】:
我正在我的主要组件中发出一个事件:
main.component.ts
this.sharedService.cartData.emit(this.data);
这是我的 sharedService.ts
import { Component, Injectable, EventEmitter } from '@angular/core';
export class SharedService {
cartData = new EventEmitter<any>();
}
在我的另一个(子)组件中,我想访问这个值,但不知何故,订阅不起作用:
dashboard.ts
private myData: any;
constructor(private sharedService: SharedService) {
this.sharedService.cartData.subscribe(
(data: any) => myData = data,
error => this.errorGettingData = <any>error,
() => this.aggregateData(this.myData));
}
我错过了什么吗?当我将数据作为 Injectable 传递时,它工作正常。 在一些 REST 调用之后发出事件(在主组件中)。
更新
所以问题是子组件是在事件第一次发出之后创建的。我想在这种情况下最好将数据直接注入subcompnent。
【问题讨论】:
-
您在哪里提供共享服务?服务的实例可能不一样,如果你在不同的模块中提供服务,就会发生这种情况。
-
我在父 app.module.ts 提供者中声明了它:[SharedService ...],
-
如何同时加载两个组件?在不同的路线?
-
你用
@Injectable()装饰服务了吗? -
对于 main.components.ts,我确实使用了路由,但仪表板组件是在 main.component.html 中作为选择器 (
) 创建的。
标签: angular typescript subscription eventemitter sharedservices