2017-10-12 41 views
0

我在服務類中創建了一個行爲主題。如何爲對象創建行爲主題並在另一個組件上訂閱它?

public personObject: BehaviorSubject<any> = new BehaviorSubject<any>({ 
               personId: 1, 
               name: 'john doe' 
               }); 

在一個導入這項服務的組成部分,我已經訂閱此行爲主體是這樣的:

`  this._subscription.add(
      this._bankService.personObject.subscribe(data => { 
       this.personObject = data; 
       console.log(data); 
      }) 
     );` 

但我不能夠得到確切的數據在行爲主體設定。請幫忙。

編輯 我忘了提及我已經使用ViewContainerRef來創建我的兄弟姐妹組件。所以我在我的問題上添加了一些沒有評論的答案。

+0

你可以做一個演示? – martin

+0

添加有關服務和組件類的更多信息(代碼) –

+0

爲了簡單起見,我只想使用BehaviorSubject在兄弟組件之間傳遞對象。只要提供有關如何執行操作的任何演示或文章都將有所幫助。謝謝 – Prabesh

回答

0

我忘了提,我用我所用ViewContainerRef創建一個兄弟組件,事實證明,行爲主體不能以組件創建的usi同樣的方式工作ng ViewContainerRef。

其他智慧任何對象的行爲主題都完全像數字或字符串一樣工作。現在我使用@Input將數據發送到組件。

0

服務

@Injectable() 
export class DataService { 

    private _dataListSource: BehaviorSubject<IData[]> = new BehaviorSubject([]); 
    dataList: Observable<IData[]> = this._dataListSource.asObservable().distinctUntilChanged(); 

    ... 

    getDataList(): Observable<any> { 
     return this.httpService.get('/data').map(res => { 
      this._dataListSource.next(res); 
     }); 
    } 

,然後你可以用它在你的組件

export class DataComponent implements OnInit { 

    public dataList$: Observable<IData[]>; 

    constructor(public dataService: DataService) {} 

    ngOnInit() { 
     this.dataList$ = this.dataService.dataList; 
     this.dataService.getDataList().subscribe(); 
    } 
} 

和你的HTML

<div *ngIf="dataList$ | async; let dataList; "> 
     <div *ngFor="let data of dataList"> 
      {{ data | json}} 
     </div> 
    </div> 
相關問題