2017-09-16 8 views
2

他のすべての呼び出しが正常に機能していても、this.albumDetailsが特定の行に対して未定義であるというエラーを以下の関数呼び出しで受け取りました。角2は定義されていません

エラーがある:例外TypeError:_this.albumDetailsエラーがおそらく項目はJSONの配列がどのような援助がおかげで理解される

オブジェクトであるthis.albumDetails.concat(アイテム)で発生未定義

あります。

export class AppComponent { 
 
albums: any[]; 
 
albumDetails: any[]; 
 
searchAlbum(input: any){ 
 
    this.show = true; 
 
    this.searchService.getAlbum(input).subscribe(data => { 
 
     this.albums = data; 
 
     for(var i = 0; i < 50; i++){ 
 
     this.searchService.getDetails(this.albums[i].artist, this.albums[i].name, this.albums[i].mbid).subscribe(items => { 
 
      this.albumDetails = this.albumDetails.concat(items); //Error occuring here at this.albumDetails.concat(items) 
 
      console.log(this.albumDetails); 
 
     }); 
 
     } 
 
    }); 
 
    } 
 
}

+1

ここで 'this.albumDetails'はどこで初期化しますか? – echonax

+0

searchAlbumが定義されているクラスの外で –

答えて

3

また、あなたが

012をバッククォート使用

this.albumDetails = `${this.albumDetails}${items}`; 

として文字列の連結のためのES5の構文を使用することができますalbumDetails

空の文字列に
albumDetails : string =' ' 

を初期化します

` ` 

Reference Stackoverflow Post

アップデート1:コメント

あたりのように、albumDetailsが配列であるので、配列に要素をプッシュする前に初期化する必要があるので、外に以下の行を追加しているようですループ

this.albumDetails = []; 

または変数宣言時

albumDetails = []; 
+0

ここで間違った関数を使っているかもしれませんが、私は配列の配列を持つようにjson呼び出しからalbumDetailsへ配列をプッシュしようとしています。おそらく.concatの代わりに.pushを使用するべきですが、まだ未定義のエラーが発生します。 –

+0

'albumDetails'は配列か文字列ですか??あなたは完全な投稿を追加することができます – Aravind

+0

申し訳ありませんが、私は配列が既に初期化されていることが明らかであると私は質問のコードを更新しました。 @WilliamLake。 –

関連する問題