为何在empForm.reset()之后;必填字段标记为无效错误?

问题描述 投票:0回答:2

我正在学习Angular Form。这是一个简单的表单,具有ename / job / sal字段,ename / job是必填项。在我提交之前,当我输入值时,验证程序可以正常工作,清除功能也可以很好地擦除填充的文本。但是,在我单击提交(调用empForm.reset())之后,必填字段标记为红色-无效字段错误,清除按钮也无法消除红色,我认为这不是合理的行为。我只想提交后,所有字段原先都保留,而没有失败的验证红色标记。如何实现这一目标,谢谢。

感谢与问候,马丁。

<form [formGroup]="empForm" (ngSubmit)="onSubmit()">
    <div class="fields-container">
        <mat-form-field>
            <input formControlName="ename" matInput placeholder=Ename>
            <mat-error *ngIf="empForm.controls['ename'].errors?.required">Ename is required.</mat-error>
        </mat-form-field>
        <mat-form-field>
            <input formControlName="job" matInput placeholder=Job>
            <mat-error *ngIf="empForm.controls['job'].errors?.required">Job is required.</mat-error>
        </mat-form-field>
        <mat-form-field>
            <input formControlName="sal" matInput placeholder=Salary>
        </mat-form-field>
    </div>
    <div class="buttons-container">
        <button mat-raised-button type="submit" [disabled]="empForm.invalid">Submit</button>
        <button mat-raised-button type="button" (click)="onClear()">Clear</button>
    </div>
</form>

import { Component, OnInit } from '@angular/core';
import { FormBuilder, Validators } from '@angular/forms';

@Component({
  selector: 'app-emp',
  templateUrl: './emp.component.html',
  styleUrls: ['./emp.component.scss']
})
export class EmpComponent implements OnInit {
  empForm;
  constructor(private fb: FormBuilder) {
    this.empForm = this.fb.group({
      ename: ['', Validators.required],
      job: ['', Validators.required],
      sal: [1000]
    })
  }

  ngOnInit(): void {
  }

  onSubmit(){
    // save to db - TBD
    this.empForm.reset();
  }


  onClear(){
    this.empForm.reset();
  }

}
angular forms reset
2个回答
0
投票

这里是一个您可以这样做的示例

html

<form [formGroup]="form" novalidate (submit)="submit()" #myform="ngForm">
     <input type="text" formControlName="firstName" />   
     <p *ngIf="form.get('firstName').hasError('required') && myform.submitted">Name is required</p>
     <button type="submit">Submit</button>
   </form>

component

constructor(private fb: FormBuilder) {   
     this.form = this.fb.group({
       firstName: ['', Validators.required]
     });   
  }  

我们只是将ngForm指令导出到本地变量,并使用其提交的属性作为指示,以了解何时提交表单,仅此而已!


0
投票

我认为它是已知的issue,您可以尝试作为issue

HTML:

workaround

TS:

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

@ViewChild('f') myNgForm; onSubmit() { // Service call this.myNgForm.resetForm(); }

© www.soinside.com 2019 - 2024. All rights reserved.