2016-06-15 98 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