0

我对来自材料库的一个输入的表单有疑问。 输入

当我提交表单时,我在提交方法中像这样重置它:

onSubmitPriceForm() {
      // to do......
      this.priceForm.reset();
    }

}

问题是表单在验证后看起来像这样: 输入警告

我希望该字段返回到照片 1 中的原始状态

我怎样才能做到这一点 ?

谢谢 !

编辑这里的验证器:

initPriceForm() {
    this.priceForm = this.formBuilder.group({
      price: ['', [Validators.required, Validators.pattern(this.pricePattern)]]
    });
  }

新编辑:这是 html 表单:

<form [formGroup]="priceForm" (ngSubmit)="onSubmitPriceForm()">
            <div class="edit-price-form">
                <mat-form-field appearance="outline" errorState="false">
                    <mat-label>{{ 'PRIX_TTC.NOUVEAU_PRIX_TTC' | translate }}</mat-label>
                    <input matInput name="price" autocomplete="off" formControlName="price" required>
                </mat-form-field>
    
                <button type="button" mat-mini-fab color="primary">
                    <mat-icon>done</mat-icon>
                </button>
            </div>
        </form>
4

1 回答 1

0

默认情况下,当控件无效并且用户已与(触摸)元素交互或已提交父表单时显示这些错误消息

您可以使用 customError 匹配器更改此行为

组件.ts

export class InputOverviewExample {
  matcher = new MyErrorStateMatcher();
  group = new FormGroup({
    control:new FormControl('', Validators.required)
  })
}

export class MyErrorStateMatcher implements ErrorStateMatcher {
  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {
    // const isSubmitted = form && form.submitted;
    return !!(control && control.invalid && (control.dirty || control.touched));
  }
}

组件.html

<form #form="ngForm" [formGroup]="group" class="example-form">
  <mat-form-field class="example-full-width" appearance="fill">
    <mat-label>Favorite food</mat-label>
    <input [errorStateMatcher]="matcher" matInput placeholder="Ex. Pizza" formControlName="control">
  </mat-form-field>

  <button (click)="group.get('control')!.reset();"> Click</button>
  
</form>

工作示例

于 2021-07-20T14:55:22.137 回答