Je veux ajouter des objets à un tableau d'objets.
J'ai donc créé une variable et je l'ai initialisée
[
{
"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="
},
{...}
]
Ensuite, j'essaye d'ajouter des objets à venir depuis un service
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);
});
}
Le problème se produit lorsque j'essaye de pousser un objet dans mon Array: this.articles.push (article); p>
Lorsque je fais cela, je reçois une erreur:
core.js: 15723 ERROR TypeError: Impossible de lire la propriété 'articles' de indéfini
Le JSON renvoyé par le service Web, ressemble à ça
articles: {}[] = [];
3 Réponses :
La fonction de rappel que vous transmettez à articles.forEach est une fonction normale.
Vous devez passer une fonction de flèche ( () => {} ) au lieu de conserver le contexte de this.
Remplacez ceci:
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);
});
}
par ceci:
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);
});
}
Ouais ça marche, merci pour l'explication! (il faut attendre 5 minutes pour accepter votre réponse)
@ 118218 oh je vois que c'est la bonne réponse, jusqu'à ce que la fonction de flèche chaque nouvelle fonction JavaScript définisse sa propre valeur this
lorsque vous utilisez la fonction ce n'est pas connu dans la fonction donc this.articles n'est pas défini, essayez d'utiliser la fonction de flèche:
articles.forEach((article, i)=> {
console.log(article);
this.articles.push(article);
});
p>
@ 118218 lisez la section Manipulation de cette mdbootstrap.com / education / angular / typescript-9-arrow-functio ns . aidera à comprendre ce et les fonctions fléchées.
Vous pouvez simplement attribuer une réponse au tableau sur une seule ligne plutôt que sur une boucle:
Service.articlesGetArticlesForEdition(editionId).subscribe(articles =>
{
for (let art of articles) {
this.articles.push(art);
}
}
puis
articles: any[] = [];
Non, en fait, je souhaite appliquer certains filtres et ne pas attribuer toute la réponse.
changez-le simplement en
articles: [] = [];@JoelJoseph, j'ai essayé mais je n'ai rien changé