Je souhaite modifier certaines valeurs d'un tableau après m'être abonné.
this.data = this.search.getProductsById(this.id).subscribe
((data: any) => {
this.list = data;
//Here for each price I want to change price value
for (let entry of this.list.deals.new) {
if (entry.country == 'UK') {
let p = entry.price * 1.10837; //here I change price
console.log(p); //displays new price
}
}
this.loading = true;
});
Mais en HTML , il affiche l'ancien prix, pas p . Comment le changer pour que j'en reçoive un nouveau html ?
3 Réponses :
Je pense que c'est parce que vous n'avez pas défini la nouvelle valeur p dans votre tableau, je pense que c'est comme ça:
this.data = this.search.getProductsById(this.id).subscribe
((data: any) => {
this.list = data;
//Here for each price I want to change price value
for(let entry of this.list.deals.new){
if(entry.country == 'UK'){
entry.price *= 1.10837;
console.log(entry.price); //displays new price
}
}
this.loading = true;
}
Oui ... Parfois juste des erreurs stupides ... Désolé.
Votre p est local par rapport à votre condition if dans une classe uniquement. Vous devez simplement attribuer la valeur à la propriété variable elle-même.
Donc, il suffit de remplacer la ligne let p = entry.price * 1.10837; par entry.price = entry.price * 1.10837; Voilà!
Si je comprends bien, votre méthode getProductsById () renvoie un tableau d'offres qui ont un champ country. Si je comprends bien, vous devez utiliser l'opérateur map quelque chose comme ceci
this.data = this.search.getProductsById(this.id)
.pipe(map((data: any) => {
if (data.deals.country === 'UK') {
return data.deals.price = data.deals.price * 1.10837;
}
}))
.subscribe(data => console.log(data.deals.price));
Pour une meilleure compréhension, donnez-nous la structure de l'objet retourné
Pouvez-vous ajouter votre code
html?Votre exemple ne montre pas que vous ne mettez pas à jour le prix. En utilisant
letvous créez une nouvelle variable et ne l'assignez à rien. La modification de la valeur serait effectuée en faisant quelque chose commeentry.price = entry.price * 1.10837;Bien sûr, va éditer maintenant.
Oh ... Désolé pour la question stupide, vraiment foiré ...; D
Comme l'a dit @ AndrėjusLazauskas, vous ne faites que le changer localement.