1
votes

Angular 2 change la valeur du tableau lors de l'abonnement

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 ?


5 commentaires

Pouvez-vous ajouter votre code html ?


Votre exemple ne montre pas que vous ne mettez pas à jour le prix. En utilisant let vous créez une nouvelle variable et ne l'assignez à rien. La modification de la valeur serait effectuée en faisant quelque chose comme entry.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.


3 Réponses :


4
votes

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;
}


1 commentaires

Oui ... Parfois juste des erreurs stupides ... Désolé.



1
votes

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à!


0 commentaires

2
votes

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é


0 commentaires