2016-06-15 94 views
0

我試圖從其餘數據服務調用中設置2個變量,這會在元素「_embedded」和「page」中返回JSON文檔中的結果。Angular 2 Observable

我想在一個組件中有2個變量,觀察服務中設置的2個變量。我正在經歷的是1個觀察者被定義幷包含結果,另一個觀察者因爲某種原因在服務中「未定義」而沒有定義。

錯誤是,_pageObservier未定義,當我嘗試執行此語句this._pageObserver.next(this._page);

任何洞察力讚賞...

這裏是服務中的代碼。

@Injectable() 
export class ProductService { 
    products$: Observable<Product[]>; 
    pager$: Observable<{}>; 
    private _baseUrl: string; 
    private _pageObserver: Observer<{}>; 
    private _productObserver: Observer<Product[]>; 
    private _page:{}; 
    private _dataStore: { products: Product[] }; 

    constructor(private _http: Http) { 
    this._baseUrl = 'http://localhost:8000/products'; 
    this.products$ = new Observable(observer => this._productObserver = observer).share(); 
    this.pager$ = new Observable(observer => this._pageObserver = observer).share(); 
    this._dataStore = { products: [] }; 
    this._page = {}; 
    } 

    load() { 
    //this._http.get(`${this._baseUrl}/product`).map(response => response.json()).subscribe(data => { 
    this._http.get(`http://localhost:8000/products`).map(response => response.json()).subscribe(data => { 
     this._dataStore.products = data['_embedded'].products; 
     this._productObserver.next(this._dataStore.products); 
     this._page = data['page']; 
     this._pageObserver.next(this._page); <=== THIS IS NOT DEFINED 
    }, error => console.log('Could not load products.')); 
    } 
+0

我認爲你需要在你的構造函數初始化_pageObserver。編輯 - 什麼是呼叫傳呼機,將導致它初始化? – Sam

+0

我相信這是在構造函數中的第三條語句中完成的... – Don

+0

我並不熟悉Observable,但我相信直到pager $實際上會觀察它不會觸發並初始化_pageObserver。 – Sam

回答

0
this._page = {}; 

this.pager$ = new Observable(observer => { 
    this._pageObserver = observer).share(); 
    this._pageObserver.next(this._page); 

}); 
+0

這兩個observable都在調用組件中的ngOnInit方法中被引用,所以不能真正有一個單獨的調用load()方法ngOnInit()this.products = this.productService.products $; this.pager = this.productService.pager $; this.productService.load(); } – Don

+0

請參閱編輯...將工作?不知何故,你將需要在尋呼機$上等待。 – Sam

+0

相同的結果...在調試器中,_pageObserver未定義或可查看,但_productObserver是... – Don