即使原始

时间:2019-07-09 15:41:30

标签: angular validation angular-material

我正在Angular 8中使用Material和Reactive Forms构建一个应用程序。我有一个反应式表单,其中包含字段ItemID,标题和描述。

ItemID字段旁边有一个搜索按钮,用于发送HTTP请求以从外部API获取数据。这一切都正常工作。但是,单击搜索按钮并返回响应后,即使字段尚未被触摸且原始,验证仍以红色突出显示“标题”和“描述”字段。由于尚未触摸这些字段,因此不应以红色突出显示它们。

这里是当窗体控件以红色突出显示时仍适用于原始控件的类。

mat-form-field ng-tns-c9-58 mat-primary mat-form-field-type-mat-input mat-form-field-appearance-outline mat-form-field-can-float mat-form-field-should-float mat-form-field-has-label ng-untouched ng-pristine ng-invalid mat-form-field-invalid

TS组件

  constructor(
    private fb: FormBuilder
  ) { }

// Initialize Item Detail form
this.itemDetailForm = this.fb.group({
  Item: this.fb.group({
    ItemID: [null],
  }),
  Title: [null, Validators.compose([
    Validators.required,
    Validators.maxLength(10),
  ])],
  Description: [null, Validators.compose([
    Validators.required,
    Validators.maxLength(10),
});

HTML组件

<form [formGroup]="itemDetailForm" (ngSubmit)="onSubmit()">
  <div formGroupName="Item">
    <mat-form-field appearance="outline" floatLabel="always">
      <mat-label>Item ID</mat-label>
      <input matInput formControlName="ItemID">
    </mat-form-field>
    <button mat-raised-button (click)="onItemSearch(this.itemDetailForm.get('ItemID').value)"
   [disabled]="itemDetailForm.get('ItemID').invalid">
      <mat-icon>search</mat-icon>
    </button>
  </div>
  <mat-form-field appearance="outline" floatLabel="always">
    <mat-label>Title</mat-label>
    <input matInput formControlName="Title">
  </mat-form-field>
  <mat-form-field appearance="outline" floatLabel="always">
    <mat-label>Description</mat-label>
    <input matInput formControlName="Description">
  </mat-form-field>
</form>

1 个答案:

答案 0 :(得分:1)

这是因为默认情况下,表单元素内的任何按钮都将运行本机提交功能,以验证您的输入。

在按钮元素上使用type="button"。默认情况下,type="submit"