javascript - angular2 http在点击事件下,第一次点击为undefined,第二次才能获得值
怪我咯
怪我咯 2017-05-15 17:13:55
0
1
784

angular2 http在点击事件下,第一次点击为undefined,第二次才能获得值,这个是什么原因,如何实现,每点击一次,都显示不同的值?

就比如下面的代码中,okLogin()我已经获得了name和password,我将返回的data赋值给this.result,然后在当点击事件发生后执行isLogin(),isLogin则会执行okLogin。但是我发现,我点击第一次的时候,result尽然是undefined,点击第二次的时候可以得到result,但是当result值发生变化后,第一次点击仍然是打印出了前一个值,并不是当前获得的值。请问该怎么解决?

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

打印出来的效果:
undefined
{data的数据}

之前我初始化了result的值,但是后面当传入的用户名和密码发生变化时,http.get数据已经发生了变化,但是result却还是之前的值,需要第二次点击后才正确显示。

以前我做count++的时候也遇到这个问题,只不过自加当时是直接从0开始,而我不想看到0,只想让他从1开始,因此我就给count设置了默认值为1

怪我咯
怪我咯

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

모든 응답 (1)
黄舟

okLogin() 메소드가 잘못 작성되었습니다.subscribe비동기적 동작이 있습니다. 따라서 okLogin이 호출되면 this.result에 값이 할당되지 않은 것으로 나타나며 isLogin은 계속 실행됩니다.

수정 계획:

(1)약속방식
(2)구독 작성방식 수정

으아아아
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!