[英]ERROR TypeError: Cannot read property 'forEach' of undefined
[英]ERROR TypeError: Cannot read property 'property' of undefined
我想将对象添加到对象数组中。
所以我创建了一个变量并将其初始化
articles: {}[] = [];
然后,我试图添加来自服务的对象
loadArticles(editionId) {
this.articlesService.articlesGetArticlesForEdition(editionId).subscribe(articles => {
console.log(articles);
articles.forEach(function (article, i) {
console.log(article);
this.articles.push(article);
});
console.log(this.articles);
});
}
当我尝试将对象推到Array时会发生问题: this.articles.push(article);
当我这样做时,我收到一个错误:
core.js:15723错误TypeError:无法读取未定义的属性“ articles”
Web服务返回的JSON如下所示
[
{
"category": "Editorial",
"categoryFR": "Editorial",
"shortCategory": "Editorial",
"shortCategoryFR": "Editorial",
"title": "Let’s go digital!",
"titleFR": "Let’s go digital!",
"chapo": "",
"chapoFR": "",
"bodyStyle": false,
"body": "",
"bodyFR": null,
"body2": null,
"body2FR": null,
"mainVideo": null,
"mainVideoCaption": null,
"mainVideoCredits": null,
"readingTime": "2",
"edition": {
"title": "Issue 1 - December 2018",
"slogan": "The REYL Group Collaborators' Magazine",
"mainPicture": null,
"position": 1,
"status": true,
"id": "276f5c0f-346d-4ef5-a2cb-2711f6237bbe",
"timestamp": "AAAAAAAACAU="
},
"date": "December 2018",
"dateFR": "Décembre 2018",
"theme": null,
"articleAuthors": null,
"author": null,
"position": 0,
"pictures": null,
"mainPicture": {
"id": "0716a4f4-4fcb-4cd7-b00c-d3cd0fbbc313",
"name": "14ac31ef-7818-4739-b54c-eea4974e79dcIssue01_December2018_Edito_Image_01.jpg",
"originalName": "Issue01_December2018_Edito_Image_01.jpg",
"status": false
},
"smallPicture": {
"id": "3c98ce44-4c9f-4383-b6a9-8a4759264c29",
"name": "e0c9d687-e3b2-438f-8c25-d020ea4f0762Issue01_December2018_Image_Rubrique_Edito.jpg",
"originalName": "Issue01_December2018_Image_Rubrique_Edito.jpg",
"status": false
},
"gallery1": null,
"gallery2": null,
"galleries": null,
"mainPictureCaption": null,
"mainPictureCaptionFR": null,
"mainPictureCredits": "© Adobe Stock/Vege",
"mainPictureCreditsFR": null,
"id": "1133f0bd-abe4-4278-9dc5-465956dc8e2d",
"timestamp": "AAAAAAAACMQ="
},
{...}
]
您传递给articles.forEach
的回调函数是一个正常函数。
您应该传递Arrow Function( () => {}
)来保留this
的上下文。
更改此:
loadArticles(editionId) {
this.articlesService.articlesGetArticlesForEdition(editionId)
.subscribe(articles => {
console.log(articles);
articles.forEach(function(article, i) {
console.log(article);
this.articles.push(article);
});
console.log(this.articles);
});
}
对此:
loadArticles(editionId) {
this.articlesService.articlesGetArticlesForEdition(editionId)
.subscribe(articles => {
console.log(articles);
articles.forEach((article, i) => {
console.log(article);
this.articles.push(article);
});
console.log(this.articles);
});
}
当您使用函数时, this
在函数中是未知的,因此this.articles
是未定义的,请尝试使用箭头函数:
articles.forEach((article, i)=> {
console.log(article);
this.articles.push(article);
});
您可以简单地在一行而不是循环中将响应分配给数组:
articles: any[] = [];
接着
Service.articlesGetArticlesForEdition(editionId).subscribe(articles =>
{
for (let art of articles) {
this.articles.push(art);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.