Angular MAT:表单验证导致 "jit_nodeValue_6(...).hasError() is not a function"

Angular MAT: Form validation causes "jit_nodeValue_6(...).hasError() is not a function"

我不确定为什么会收到以下错误:ERROR TypeError: jit_nodeValue_6(...).hasError is not a function

看起来 Angular 不喜欢我给 title.hasError() 的电话。有人知道为什么吗?谢谢!

这是我的 HTML 模板:

<form [formGroup]="detailsForm">
    <mat-form-field >        
        <input matInput placeholder="Title" formControlName="title" name="title" #title>
        <mat-error *ngIf="title.hasError('required')">
                Title is <strong>required</strong>
        </mat-error>         
    </mat-form-field>
    ...
</form>

如果你想检查 FormControl 错误,那么你可以考虑 FormControlDirectiveFormControl 作为 @Input: 例子

  <input name="name" [formControl]="name">

否则访问 FormControl 作为 formGroup 的 属性 以及 .? safe-navigation-operator aka elvis operator

 detailsForm?.controls?.title?.hasError('required') 

修改代码

<div class="example-container">
    <form [formGroup]="detailsForm">
        <mat-form-field >        
            <input matInput placeholder="title" formControlName="title" name="title" #title>
            <mat-error *ngIf="detailsForm?.controls?.title?.hasError('required')">
                  <p>Required</p>
            </mat-error>         
        </mat-form-field>
    </form>
    </div>

stackblitz

您可以使用 ngIf 如下:

*ngIf="detailsForm.get('title').hasError('required')"

因此,您必须按以下方式更改 mat-error 标记中的 ngIf

<form [formGroup]="detailsForm">
    <mat-form-field >        
        <input matInput placeholder="Title" formControlName="title" name="title" #title>
        <mat-error *ngIf="detailsForm.get('title').hasError('required')">
                Title is <strong>required</strong>
        </mat-error>         
    </mat-form-field>
    ...
</form>

您可以通过使用 ngModel

以更简单的方式使用 ('hasError')
<div class="example-container">
    <form [formGroup]="detailsForm">
        <mat-form-field >        
            <input matInput placeholder="title" formControlName="title" ngModel name="title" #title="ngModel">
            <mat-error *ngIf="title?.hasError('required')">
                  <p>Required</p>
            </mat-error>         
        </mat-form-field>
    </form>
    </div>