我有一個數據服務,通過HTTP運行查詢(由某個組件觸發),然後通過Observable
公開結果。其他組件將訂閱Observable
並更新他們對結果的看法。RxJS/Angular2:爲什麼我的主題訂閱者未被調用?
無論如何,這是主意,但它不工作。這是我的代碼。
ItemListDataService:
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { Observable, Subject } from "rxjs";
import 'rxjs/add/operator/map';
@Injectable()
export class ItemListDataService {
private issues$: Subject<any>;
constructor(private http: Http) {
this.issues$ = new Subject();
this.issues$.subscribe(x => console.log('GOT IT', x));
}
getList(): Observable<any> {
return this.issues$;
}
refresh() {
this.http.get('/whatever')
.map((response: Response) => response.json())
.subscribe(data => this.issues$.next(data));
}
}
ItemListComponent:
import { Component } from '@angular/core';
import { Observable } from 'rxjs';
import { ItemListDataService } from './item-list-data-service';
@Component({
selector: 'app-item-list',
templateUrl: './item-list.component.html',
styleUrls: ['./item-list.component.css'],
providers: [ItemListDataService]
})
export class ItemListComponent {
data: any;
constructor(itemListDataService: ItemListDataService) {
itemListDataService.getList().subscribe(data => {
console.log('DATA CHANGED');
this.data = data;
}, err => {
console.log('ERR', err)
},() => {
console.log('DONE');
});
}
}
在ItemListDataService.constructor
創建的用戶被調用每次refresh()
被調用時。唯一不起作用的是組件中的訂閱 - 既沒有在那裏調用回調。
我在做什麼錯?
Woo調用refresh()?它從哪裏得到ItemListDataService?您已將ItemListDataService添加到ItemListComponent的提供者,以便組件(及其子組件)將獲得自己的服務實例,與其他組件不同。 –
@JBNizet謝謝,經過一番研究,我得出了同樣的結論。事實上,問題是每個組件都有自己的服務實例。來自Angular 1(和許多其他的DI框架),我期待他們是單身人士。活到老,學到老。 :-) 隨意張貼,作爲答案。 –