首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反应式表单重置和表单验证

反应式表单重置和表单验证
EN

Stack Overflow用户
提问于 2021-10-05 05:06:08
回答 1查看 364关注 0票数 1

我知道这个问题以前被问过很多次。我想在提交后重置我的表单和验证。我使用formGroup创建了一个表单。我使用了用于提交表单的按钮如果表单有效我使用form.reset()重置表单它清除字段但不显示错误我也尝试使用

代码语言:javascript
复制
this.form.markAsPristine();
this.form.markAsUntouched();
this.form.updateValueAndValidity();

来重置表单验证,但它不起作用

从下面给出的代码中,我可以重置表单,但输入字段仍然是脏的或被触摸,结果输入字段被标记为红色。有人能建议我什么是创建表单、重置表单和验证的最佳实践吗?

我的html代码是

代码语言:javascript
复制
    <mat-form-field class="example-full-width" appearance="outline" style="width: 100%;">   
        <input type="text" matInput formControlName="title" placeholder="Enter Module Title" #message maxlength="50">
        
        <mat-error *ngIf="form.controls.title.hasError('required') && (form.controls.title.dirty || form.controls.title.touched)">
          Module Title is <strong>required</strong>
        </mat-error>
      </mat-form-field>

  <button (click)="save()"> Save</button>

这是我的.TS文件

@ViewChild('my2Form',{ static: false }) my2Form!:NgForm;

代码语言:javascript
复制
    this.form = this.fb.group({
      title: ['',[Validators.required]],
    });

   save()
     { if(this.form.invalid)
      { this.form.markAllAsTouched();
         return;
       }
     else
      {
      this.my2Form.resetForm();
      this.form.markAsPristine();
      this.form.markAsUntouched();
      this.form.updateValueAndValidity();
      this.form.markAsPristine();
        }

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-05 12:17:21

在模板中只需添加type=button

代码语言:javascript
复制
<button type="button" (click)="save()">Save</button>

在component.ts中

代码语言:javascript
复制
if (this.form1.invalid) {
    this.form1.markAllAsTouched();
} else {
    this.form1.reset();
}

Angular demo

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69445151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档