2016-03-31 12 views
2

私は2つの並行した指示(親子に付いている)を持っており、できるだけ観測可能なサービスを使って通信したい。私はofficial component interaction guidlineを読んだことがありますが、それは親子のやりとりについて語っています。私はplunkerを2つのディレクティブで作成しようとしましたが、動作しません。 >角2サービスを介したコンポーネントの相互作用

export class DirService { 
    contentSource = new Subject(); 
    content$ = this.contentSource.asObservable(); 
} 

そしてが、< DIR1の間のブリッジを作るために、このサービスを使う>と< DIR2:

基本的に、私が欲しいのは、サービスを作成することです。誰かがこのsenerioを実装する方法を指摘できますか?

ところで、私は主にので、観察を使用することを選択した:私はthis threadpostを読む

  • 多くのディレクティブが通信できるようにするには、ロジックをより明確にすることができます。

ありがとう!

答えて

5

各コンポーネントに対して新しいインスタンスが維持されます。

共有サービスを取得するには、bootstrap(AppComponent, [DirService])または共有コンポーネントのルートコンポーネントとスコープを定義するコンポーネントとディレクティブの共通の祖先で1つだけ追加します。
このように、すべての子孫が同じインスタンスを取得します。 AngularJs 2 - multiple instance of service created
- - How to use Dependency Injection (DI) correctly in Angular2?

+1

THX

Plunker example


参照してください!そしてここに働いている[プランカ](http://plnkr.co/edit/5PQ9AmbfNVDHfWIW54mN?p = preview)あなたのアドバイスに基づいて共通の祖先を使用します。 – lys1030

+1

よく言った!ありがとう! –

1

あなたはあなたのアプリケーションをブートストラップするときDirServiceサービスを指定する必要があります。

bootstrap(AppComponent, [ DirService ]); 

とコンポーネントプロバイダ属性からそれを削除します。

@Component({ 
    (...) 
    //providers: [ DirService ] 
}) 

あなたがのためのサービスの同じインスタンスを共有します。この方法アプリケーション全体(と両方のコンポーネント)。

このplunkr:http://plnkr.co/edit/rYq3iicbd4mKGyxHlJmg?p=previewを参照してください。

この動作は、Angular2依存性注入の「階層インジェクタ」にリンクしています。

は、詳細については、この質問を見ている可能性があり:あなたは、各コンポーネント

@Component({ 
    selector: 'dir2', 
    template: '{{field}}', 
    providers: [DirService] 
}) 

providersに "共有" サービスを追加する場合

関連する問題