5

私のアプリケーションについては、以下の図を検討してください

ここに画像の説明を入力

EventsHub は単純な注入可能なサービスです。

import {Injectable} from '@angular/core';
import {Subject}    from 'rxjs/Subject';

@Injectable()
export class EventsHub {
    private announcementSource = new Subject<string>();
    messageAnnounced$ = this.announcementSource.asObservable();

    announce( message : string)  {
        console.log('eventHub : firing...'+message);
        this.announcementSource.next(message);
   }
} 

問題は、Funds、Clients、または router-outlet 内の他のコンポーネントから「announce」関数が呼び出された場合、親 (MainApp) がメッセージを受信しないことです。

一方、 NavigationMenu から同じサービス関数を呼び出すと、 MainApp は問題なくイベントを受け取ります。では、ルーティングされたコンポーネントがその親と対話するにはどうすればよいのでしょうか?

ありがとう

このケースは RC1 と RC2 でテスト済みです

4

2 に答える 2

3

EventsHub共通の親 (ルート コンポーネント) で 1 回だけ提供するようにしてください。DI は、プロバイダーごとに 1 つのインスタンスを維持します。それを使用するすべてのコンポーネントでそれを提供すると、すべてのコンポーネントが異なるインスタンスを取得します。したがって、1 つのコンポーネントが 1 つのインスタンスでリッスンし、もう 1 つのコンポーネントが別のインスタンスで発行します。

于 2016-06-26T10:13:08.137 に答える