.reset()清除表单但不删除验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.reset()清除表单但不删除验证相关的知识,希望对你有一定的参考价值。

我有一个反应形式,我有一个密码字段,并在提交表单时,我想重置表单。从谷歌搜索和阅读文档,它看起来像.reset()应将所有值设置为null并使所有pristineuntouched。然而,当我重置时,我仍然有ng-touchedng-invalid类。我不确定我哪里出错了?在它最简单的形式我有:

<form [formGroup]="newPassForm" (submit)="submitNewPass()">
    <div class="row">
        <mat-form-field>
            <mat-label>Password:</mat-label>
            <input matInput type="password" formControlName="currentPass">
        </mat-form-field>
        <div *ngIf="invalidPass" class="notice notice-error">Wrong password</div>
    </div>
    <div class="row">
        <button mat-raised-button color="primary">Submit</button>
    </div>
</form>

用我的控制器作为

ngOnInit() {
    this.newPassForm = this.formBuilder.group({
        currentPass: [
            '',
            [Validators.required, Validators.minLength(8)]
        ],
    });
}

submitNewPass() {
    this.newPassForm.reset({ currentPass: '', newPass: '' });
    return;
}

我也尝试删除了材料,但它没有任何效果。

答案

尝试:

<form [formGroup]="newPassForm" #f="ngForm">
  ...
</form>

TS:

@ViewChild('f') myNgForm;

submitNewPass() {
    this.myNgForm.resetForm({ currentPass: '', newPass: '' });
}

DEMO

以上是关于.reset()清除表单但不删除验证的主要内容,如果未能解决你的问题,请参考以下文章

如何在 "setCustomValidity("...");" 之后清除、删除或重置 HTML5 表单验证状态?

在表单提交上验证文本框

用js代码清空表单数据

如何重置包含任何验证错误的表单? [关闭]

JQuery清除表单关闭

使用jquery实现的清空表单元素代码实例