javascript - angulaire2 http Dans l'événement click, le premier clic n'est pas défini et la valeur ne peut être obtenue que la deuxième fois
怪我咯
怪我咯 2017-05-15 17:13:55
0
1
853

Dans l'événement click d'angular2 http, le premier clic n'est pas défini, et la valeur ne peut être obtenue qu'après le deuxième clic. Quelle en est la raison et comment l'implémenter ? Chaque clic affiche une valeur différente ?

Par exemple, dans le code ci-dessous, j'ai obtenu le nom et le mot de passe de okLogin(). J'attribue les données renvoyées à this.result, puis j'exécute isLogin() après que l'événement click se produit, et isLogin exécutera okLogin. . Mais j'ai constaté que lorsque je cliquais pour la première fois, le résultat n'était pas défini. Lorsque je cliquais pour la deuxième fois, je pouvais obtenir le résultat. Cependant, lorsque la valeur du résultat changeait, le premier clic affichait toujours la valeur précédente, ce qui était le cas. n’était pas le cas. La valeur actuellement obtenue. Comment le résoudre ?

okLogin(){
    this.http.get('http://localhost:3000/api/users/login/'+this.Name+'/'+this.Pwd+'')
      .map(res => res.json())
      .subscribe(
        data => this.result=data,
        err => console.error(err),
        () => console.log('done')
      );
  return this.result
  }

isLogin(event){
    if(this.Name===''||this.Name===undefined&&this.Pwd===''||this.Pwd===undefined){
      this.check = true;
    }
    this.check = false;
    this.okLogin();
    // this.result = this.okLogin();
    console.log(this.result);
    if(this.result===true){
      console.log('登录成功')
    }else{
      console.log('发生错误')
    }

L'effet imprimé :
indéfini
{data of data}

J'ai initialisé la valeur du résultat auparavant, mais lorsque le nom d'utilisateur et le mot de passe entrants ont changé plus tard, les données http.get avaient changé, mais le résultat était toujours la valeur précédente, et il fallait un deuxième clic pour s'afficher correctement.

J'ai également rencontré ce problème lorsque je faisais count auparavant, mais l'ajout automatique démarrait directement à partir de 0, et je ne voulais pas voir 0, je voulais juste qu'il commence à partir de 1, donc j'ai défini une valeur par défaut pour le compte est 1

怪我咯
怪我咯

走同样的路,发现不同的人生

répondre à tous(1)
黄舟

La méthode okLogin() est mal écrite. subscribeIl existe un comportement asynchrone. Ainsi, lorsque okLogin est appelé, il apparaîtra que this.result n'a reçu aucune valeur et isLogin continuera à s'exécuter.

Plan de modification :

(1)Méthode de promesse
(2)Modifier la façon d'écrire l'abonnement

okLogin(){
    return this.http.get('http://localhost:3000/api/users/login/'+this.Name+'/'+this.Pwd+'')
      .map(res => res.json());
  }

isLogin(event){
    if(this.Name===''||this.Name===undefined&&this.Pwd===''||this.Pwd===undefined){
      this.check = true;
    }
    this.check = false;
    this.okLogin().subcribe(data=>{
        this.result = data;
        if(data===true){
          console.log('登录成功')
        }else{
          console.log('发生错误')
        }
    })
    
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal