2017-08-03 13 views
0

この問題の解決に時間を費やしましたが、何も役に立たなかった。私は私のプロバイダからのオブジェクトの配列を取得してい :コンソールで"値はすぐに評価されました"のためにデータを取得できません。

this.encarteProvider.getProdutosEncarte('encarte1').subscribe(prods => { 
    this.produtos = prods; 
    console.log(this.produtos); 
}); 

、それは示しています

[] 
0: Produto 
1: Produto 
2: Produto 
length: 3 
__proto__: Array(0) 

私はthis.produtos.forEach(produto => ...)をしようとする配列が空であるので、それは、私には何も表示されません。 。データは非同期的に取得され、(Chromeのコンソールのようにiアイコンをクリックすると)「値はただちに評価されました」が、なぜngForを使用して表示できますか、内部のデータは取得できません.tsファイル?

+0

あなたがこの問題を展示、模擬JSONとplunkerを作成してもらえますか? :) – Alex

答えて

0

タイミングの問題です。ページが最初に表示されるとき、データはそこにないので、ngForは何もしません。後で、データが到着すると、Angular change detectionがデータを利用できるようになり、ngForを再実行して更新します。

forEachがコード内で実行される場所は表示されませんが、データが取得される前です。それが空である理由です。

このコードをsubscribeに移動してみてください。コードは、データが取得され後までは実行されません

this.encarteProvider.getProdutosEncarte('encarte1').subscribe(prods => { 
    this.produtos = prods; 
    console.log(this.produtos); 
    this.produtos.forEach(produto => ...); 
}); 

その方法。

私はこのような私のコードでそれを試してみました:

ngOnInit(): void { 
    this._productService.getProducts() 
      .subscribe(products => { 
       this.products = products; 
       this.products.forEach(product => console.log(JSON.stringify(product))); 
      }, 
       error => this.errorMessage = <any>error); 
} 
+0

申し訳ありませんが、私の悪い。 'forEach'は' subscribe'の中にあります。例のように配列は空です。 –

+0

私は自分のコードで試してみましたが、うまくいきましたか?上記の答えに自分のコードを追加しました。 – DeborahK

+0

私はここで試してみましたが、コンソールには何も表示されません:(それはとても奇妙です...私はプロジェクトの他の部分でそのようなことをいつも使っていたので驚きましたが、このページではすべてが間違っています。 –

関連する問題