2016-06-15 20 views
0

restデータサービスコールから2つの変数を設定しようとしていますが、結果はJSONドキュメントの要素 "_embedded"と "page"に返されます。Angular 2 Observable

1つのコンポーネントに2つの変数を設定して、サービスに設定されている2つの変数を観察しようとしています。私が経験しているのは、1つのオブザーバが定義されており、結果が含まれていて、もう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

私はそれがコンストラクタの3番目のステートメントで行われていると信じています... – Don

+0

Observablesに精通していませんが、ページャ$が実際に_pageObserverを起動して初期化しない何かを実際に観察するまでは、 – Sam

答えて

0
this._page = {}; 

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

}); 
+0

両方のオブザーバブルが呼び出し側コンポーネントのngOnInitメソッドで参照されているので、実際にはload()メソッドとは別の呼び出しがあります。ngOnInit(){ this.products = this.productService.products $; this.pager = this.productService.pager $; this.productService.load(); } – Don

+0

編集を参照してください...その作業は?何とかあなたはページャー$で待つ必要があるでしょう。 – Sam

+0

同じ結果...デバッガでは、_pageObserverが定義されていないか、または表示可能ですが、_productObserverは... – Don

関連する問題