2017-01-25 16 views
7

Observableを公開するサービスを構築しています。このサービスでは、Observableで次の呼び出しをトリガーする外部関数呼び出しを受け取って、さまざまなコンシューマーがsubscribeイベントを取得するようにします。 Observerのコンストラクタでは、次に呼び出すことができますが、すべてがうまくいきますが、外部のトリガが次の呼び出しを呼び出すことができるように、コンストラクタの外でこれにアクセスするにはどうすればいいですか?Angular2 Observable - Observableのコンストラクタの外側からnextを呼び出す方法

私は

this.myObservable$ = new Observable(observer => { 
    observer.next("initial message"); 
} 

が続いて同じサービスの他の方法で、私は明らかに動作しません

this.myObservable$.observer.next("next message"); 

上記のような何かを実行することができるようにしたいんサービスの初期化中に

private myObservable$: Observable<any>; 

しかし、私はこの目標をどのように達成することができますか?

私は、観察可能なの最初のコンストラクタ

答えて

9

の外側にさらにメッセージを発する方法がなければならないので、あなたはその

this.myObservable$ = new Subject(); 

ためSubjectを作成する必要があり、私は基本的な何かが欠けてる仮定していますあなたは、任意の時点で呼び出すことができます。

this.myObservable$.next(...); 

またはサブスクライブを使用します。

this.myObservable$.subscribe(...) 
+0

hah brilliant、thanks !私は何か基本的なことが分からないことを知っていた。今、魅力のように働いています... –

2

二つの方法:

  1. myObservable $公開を行います。

    public myObservable$: Observable; 
    
  2. は、対象ストリームで観測可能にカプセル化して、次の呼び出すためのヘルパーを提供します。

    export class TestService { 
        public myObservable$: Observable; 
        private _myObservableSubject: Subject; 
    
        constructor() { 
        this._myObservableSubject = new Subject(); 
        this.myObservable$ = this._myObservableSubject.asObservable(); 
        } 
    
        public NextMessage(message?: string): void { 
        this._myObservableSubject.next(message); 
        } 
    } 
    
+0

ありがとうございました。ボヤン、それはうまくいくように見えるが、私は上記のolsnの答えに行くだろう、はるかに簡潔に思える。 –

+0

もちろん、同じことを話しています。 Angular 2のドキュメントを読んで私の答えを得ました。特にこのセクション、https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service –

関連する問題