2016-09-14 56 views
1

我試圖讓某種我的組件之間的通信的,所以我用了這樣的組件與BehaviorSubject服務和訂閱:Angular2 + RxJS BehaviorSubject認購不工作的所有組件

服務(與問題有關的碼):

import { BehaviorSubject } from 'rxjs/BehaviorSubject' 

private _clientModalActionSource = new BehaviorSubject<string>('') 
modalAction$ = this._clientModalActionSource.asObservable() 
public updateClientModalAction(action) { 
    this._clientModalActionSource.next(action) 
    console.log('sent') 
} 

組分A:

this._api.updateClientModalAction(id) 

組分B:

import { Subscription } from 'rxjs/subscription' 

private _subscription: Subscription 
ngOnInit() { this._subscription = this._api.modalAction$.subscribe(res => { 
    this.refreshModal(res) 
    console.log('received') 
})} 

這是工作完美如果B組是A組份的孩子,但如果是根組件和B是其<router-outlet>(或者相反),裏面什麼也沒有被接收到認購,我只得到在sent安慰。

我做錯了什麼?

回答

11

好,問題比我想的要簡單,我沒有在更高層次上使用服務,我不應該在每個組件中使用providers: [ApiService],而應該只在較高的根組件上使用providers: [ApiService]

我希望這會幫助別人。

https://github.com/angular/angular/issues/11618#event-790191142

+5

謝謝你,你救了我的一天 – fjc