0
votes

J'ai un problème pour créer un appel HTTP avec des données gagnées par stockage local

Je fais une demande d'API pour obtenir certaines données dépend de l'option utilisateur. Je reçois cette option utilisateur et la stocke dans le stockage local pour l'obtenir dans l'API Service pour l'utiliser comme paramètre dans URL.
Mon problème est que ces demandes fonctionnent correctement dans la première seule. Lorsque l'utilisateur en arrière et sélectionnez une autre option, le service obtient les anciennes données à partir de stockage local, pas les données mises à jour. Comment puis-je résoudre ce problème.

J'essaie d'effacer le stockage local après l'appel, mais ce n'est pas fonctionner P>

constructor(public http: HttpClient,public storage : Storage ) {

this.storage.get('cat').then((usercategory) => {
  this.usercategory =  usercategory;
  console.log(this.usercategory)
 });

 this.storage.get('loc').then((userlocation) => {
  this.userlocation =  userlocation;
  console.log(this.userlocation)

 });

 this.storage.get('serv').then((userservice) => {
  this.userservice =  userservice;
  console.log(this.userservice)

 });

getdata(){

return this.http.get(this.url + "&location=" + this.userlocation + 
"&price=" + this.usercategory + "&service=" + this.userservice);

}


5 commentaires

Vous récupérez les données du stockage local dans un constructeur? S'il vous plaît soyez plus spécifique avec 'Demander le travail pour la première seule'


Oui, je récupère des données dans le constructeur.


Je veux dire que la demande d'obtention fonctionne bien lorsque vous obtenez des valeurs à partir de stockage local, mais lorsque ces valeurs mettent à jour et que l'utilisateur rendez à nouveau, le travail de demande avec une valeur ancienne


Dans ce cas, vos propriétés ne mettent pas la mise à jour. Ils ne mettent à jour que lorsque le service instancitait, c'est-à-dire lorsque votre constructeur est appelé.


Alors, où je dois obtenir un stockage local?


3 Réponses :


0
votes

On dirait que vous mettez à jour les propriétés du constructeur de classe de service et qui s'appelle uniquement lorsque les instanciats de service.

Vous pouvez créer une fonction pour obtenir des valeurs et appeler cette fonction chaque fois que vous effectuez un appel d'API, dans ce cas. manière que les propriétés seront mises à jour chaque fois que vous appelez l'API.

et n'oubliez pas de placer ce code dans le constructeur qui doit initialiser les propriétés de la classe ou doit être appelée une seule fois lors de l'instanciation . xxx


3 commentaires

J'ai essayé cette solution mais les valeurs retournent indéfinies


Stockez-vous les valeurs dans le stockage local avant de les récupérer?


Pouvez-vous envoyer le code de composant où vous définissez le stockage local



0
votes

J'ai résolu le problème en obtenant des valeurs de localStorage dans le composant de la page et en transmettez-la au service API.

            getListings(usercategory,userlocation,userservice){

           return this.http.get(this.url + "&location=" + userlocation + 
           "&price=" + usercategory + "&service=" + userservice);

            }


0 commentaires

0
votes

Obtenir des valeurs du stockage local est ASYNC. Par conséquent, vous devez attendre ces valeurs avant de les utiliser comme: xxx


0 commentaires