2017-01-25 47 views
7

我正在構建一個暴露Observable的服務。在這個服務中,我接收外部函數調用,它應該觸發Observable上的下一個調用,以便各種消費者獲得訂閱事件。在Observer構造函數中,我可以調用next,並且一切都很好,但是如何在構造函數的外部訪問此外部觸發器以便觸發下一個調用?Angular2 Observable - 如何從Observable的構造函數的外部調用下一個

private myObservable$: Observable<any>; 

在服務初始化我做

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

然後在相同服務的其他方法,我希望能夠像

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

以上顯然是行不通的執行什麼,但我怎樣才能實現這個目標?

我假設我失去了一些東西基本因爲必須有發射可觀察到的初始構造之外更多的消息

回答

9

你應該創建爲

this.myObservable$ = new Subject(); 

然後一個Subject方式你可以在任何時候撥打:

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

或者使用訂閱:

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

哈亮,謝謝!我知道我錯過了一些基本的東西。像現在的魅力一樣工作...... –

2

兩種方式:

  1. 讓myObservable $市民:

    public myObservable$: Observable; 
    
  2. 封裝觀察到受試者中的數據流,並提供了一個幫手調用next:

    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

感謝Boyan,第二個看起來像是可以工作,但是我正在與olsn的回答上面,似乎更簡潔。 –

+0

當然,我們正在談論同樣的事情。我從閱讀Angular 2文檔中得到了答案。具體來說,這一部分,https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service –

相關問題