在收到响应时,使用set timeout更新输入字段

时间:2018-01-16 11:59:26

标签: angular

我有两个输入字段:

$

在callin checkPassword和更新密码后,我有一个功能:

        <input tabindex="5" type="password" class="form-control" name="newPsw" [(ngModel)]="newPassword"" (ngModelChange)=" checkPassword()">
        <input tabindex="5" type="password" class="form-control" name="newPsw" [(ngModel)]="newPassword"" (ngModelChange)=" checkPassword()">

}

我尝试做的是清除收到成功时的字段为true,但是没有将其值设置为空。 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

我认为发生这种情况是因为你正在使用'function'并且错误的上下文'this'。您需要在setTimeout函数之前使用箭头函数或保存上下文。 http://es6-features.org/#Lexicalthis

答案 1 :(得分:0)

setTimeout从不同的上下文执行函数会发生什么。这只是fork的一小部分,但this变量以某种方式引用该上下文。

关于它的一点阅读可能非常有用:this - Javascript

您可以执行的操作是转发this,它指向您的组件,转发到setTimeout函数,并将其用作回调中的变量。

changePasswordResult(success: boolean) {
   this.passwordUpdated = success;
   if (success) {
   setTimeout(function(comp) {
    comp.confirmPassword = '';
    comp.newPassword = '';
  }, 15000, this);
 }

答案 2 :(得分:0)

changePasswordResult(success: boolean) {
   this.passwordUpdated = success;
   if (success) {
   setTimeout(()=> {
    this.confirmPassword = '';
    this.newPassword = '';
  }, 15000);
 }

Try above code or you can use ChangeDetectorRef also
Just import this into your file 
import { ChangeDetectorRef } from '@angular/core';
then add private ref: ChangeDetectorRef into constructor
Then put this code
changePasswordResult(success: boolean) {
   this.passwordUpdated = success;
   if (success) {

    this.confirmPassword = '';
    this.newPassword = '';
     this
        .ref
        .detectChanges();
 }