javascript - angular2 http Dalam acara klik, klik pertama tidak ditentukan, dan nilai boleh diperolehi hanya untuk kali kedua
怪我咯
怪我咯 2017-05-15 17:13:55
0
1
852

Dalam peristiwa klik angular2 http, klik pertama tidak ditentukan, dan nilai hanya boleh diperolehi selepas klik kedua Apakah sebabnya dan bagaimana untuk melaksanakannya?

Sebagai contoh, dalam kod di bawah, saya telah memperoleh nama dan kata laluan daripada okLogin(). . Tetapi saya mendapati bahawa apabila saya mengklik untuk kali pertama, hasilnya tidak ditentukan Apabila saya mengklik untuk kali kedua, saya boleh mendapatkan hasilnya, tetapi apabila nilai hasil berubah, klik pertama masih mencetak nilai sebelumnya tidak berlaku. Bagaimana untuk menyelesaikannya?

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('发生错误')
    }

Kesan cetakan:
tidak ditentukan
{data data}

Saya memulakan nilai hasil sebelum ini, tetapi apabila nama pengguna dan kata laluan masuk ditukar kemudian, data http.get telah berubah, tetapi hasilnya masih nilai sebelumnya, dan ia memerlukan klik kedua untuk dipaparkan dengan betul.

Saya juga menghadapi masalah ini semasa saya melakukan kiraan sebelum ini, tetapi penambahan automatik bermula terus dari 0, dan saya tidak mahu melihat 0, saya hanya mahu ia bermula dari 1, jadi saya menetapkan nilai lalai untuk kiraan ialah 1

怪我咯
怪我咯

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

membalas semua(1)
黄舟

Kaedah okLogin() ditulis dengan salah. subscribeTerdapat tingkah laku tak segerak. Jadi apabila okLogin dipanggil, ia akan kelihatan bahawa this.result belum diberikan nilai dan isLogin akan terus dilaksanakan.

Pelan pengubahsuaian:

(1)Kaedah janji
(2)Ubah suai cara menulis langganan

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('发生错误')
        }
    })
    
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan