0

次の構造 (3 つのコンポーネント) のシステムがあります。

Grand-Father -> Father -> Children

そしてサービス: ServiceEventEmitter を持っています。

3 つのコンポーネントすべてで、サービスをプロバイダーとして設定し、それをコンストラクターに追加して、イベントエミッターにサブスクライブしました。

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

問題は、イベントを発生させるサービスからメソッドを呼び出すコンポーネントでのみ発生することです。私の推測では、このように定義することで、各コンポーネントServiceは同じではなく異なるものを取得するため、イベントは起動メソッドを呼び出したコンポーネントによってのみ表示されます。

3 つのコンポーネントすべてが同じサービスにサブスクライブして実際にイベントをキャッチできるようにするには、どのような設計を行う必要がありますか?

4

1 に答える 1

2

これをすべてのコンポーネントのプロバイダーに追加すると、すべてのコンポーネントがサービスの独自のインスタンスを取得します (共有されません)。
共通の親要素に追加するbootstrap(AppComponent, [MySharedService])か、共通の親要素に追加します。プロバイダー リスト内
の親要素は、サービス インスタンスのルート スコープです。MyServiceすべての子は同じインスタンスを取得します (ただし、間にある別のコンポーネントもMyServiceプロバイダー リストに含まれています)。

于 2016-02-19T10:36:49.103 に答える