我有两个输入字段:
$
在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,但是没有将其值设置为空。 我该如何解决这个问题?
答案 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();
}