2017-09-16 122 views
2

我在下面的函数调用中发现一个错误,指出this.albumDetails对于特定行是未定义的,即使所有其他调用都正常工作。Angular 2 _this未定义

错误是:类型错误:_this.albumDetails未定义

该错误可能发生在this.albumDetails.concat(项目),其中物品是JSON对象的数组

任何协助理解感谢。

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

初始化albumDetails空字符串

albumDetails : string =' ' 

或者您可以使用ES5语法字符串连接为

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

使用反引号

` ` 

Reference Stackoverflow Post

更新1:按照评论

似乎albumDetails是一个数组,所以阵列具有推动元件之前被初始化,所以添加以下线路输出的for循环

this.albumDetails = []; 

或变量声明期间

albumDetails = []; 
+0

Damn也许我在这里使用了错误的函数,我试图从json调用数组中推送数据到albumDetails,以便我有一个数组数组。我应该在这里使用.push而不是.concat,但我仍然得到未定义的错误 –

+0

'albumDetails'是一个数组或字符串??你可以添加完整的帖子 – Aravind

+0

对不起,我认为这将是明确的数组已被初始化,我已经更新了问题中的代码。 –