【问题标题】:checking form control input for errors by using it as a variable通过将表单控件输入用作变量来检查表单控件输入是否存在错误
【发布时间】:2019-11-25 03:30:39
【问题描述】:

我正在使用 angular 8 和 angular 材料来编写我的网站。

我创建了一个带有formGroup 的表单,我希望能够使用*ngIf 通过将实际输入元素用作参数来检查验证错误。

目前这是我的工作代码:

我有以下表格:

<form [formGroup]="queryForm" (submit)="runQuery()">
...
  <mat-form-field>
            <input matInput #timezone placeholder="Timezone" aria-label="Timezone" formControlName="timePeriodTimeZone"/>
            <mat-hint>timezone as a number</mat-hint>
            <mat-error *ngIf="hasError('timePeriodTimeZone','required')">timezone required</mat-error>
        </mat-form-field>
...
</form>

在组件的类中,我实现了hasError() 函数,如下所示:

 public hasError = (controlName: string, errorName: string) =>{
    return this.queryForm.controls[controlName].hasError(errorName);
  }

当然,我将queryForm 变量配置为由表单生成器创建的组。

有没有办法在不从类本身调用函数的情况下检查错误?

因为我在输入字段中添加了#timezone,所以我认为我将能够执行以下操作:

<mat-error *ngIf="timezone.hasError('required')">timezone required!</mat-error>

但我不能! :)

我更喜欢使用类似的东西,因为我想创建一个带有一些 mat-errors 的错误处理组件,因此我将能够在每个输入字段中重用它,并且我想将输入控件粘贴到它而不是整个表单组。

任何有关此问题的信息将不胜感激。

谢谢!

【问题讨论】:

    标签: angular angular-material angular-forms angular8 mat-input


    【解决方案1】:

    你知道如果字段有唯一的验证器,你可以简单地使用

    <mat-error>timezone required!</mat-error>
    

    (*ngIf 不是必需的)。

    如果你想对错误有很大的控制,你可以有一些像

    <mat-error >{{getError('timezone')}}</mat-error>
    

    你有一个类似的功能

    getError(field:string)
    {
       const control=this.myForm.get(field);
       string error=''
       switch (field)
        case 'timezone':
           error=control.hasError('required')?'time zone required':
                  control.hasError('other')?' other error':''
        break;
        case '....'
       }
       return error;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 2017-12-22
      • 2023-03-11
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 2012-02-13
      相关资源
      最近更新 更多