简单的模板驱动形式 Angular4 给出错误

Simple Template-Driven Form Angular4 is giving error

做一个简单的 'Template-Driven Form' 虽然我没有做任何特别的事情,但我收到了错误。这是一个简单的表单,只有一个输入和一个必需的验证。就这样。有人可以帮我吗?

abc.component.html

<form #customForm="ngForm" (ngSubmit)="alpha(customForm)">

  <input type="text" name="firstName" ngModel #firstName="ngModel" required><br/>

  <div class="red" *ngIf="customForm.firstName.touched">
    <div *ngIf="customForm.firstName.errors.required">Input field is required!</div>
  </div>

  <button type="submit" [disabled]="customForm.invalid">Submit</button>

</form>

错误:

Cannot read property 'touched' of undefined

快照:

有人可以指出,我到底做错了什么吗?

由于您已经声明了模板并通过执行 #firstName="ngModel" 为其分配了 ngModel 的值,因此 firstName 模板变量将已经具有 firstName FormControl。所以你可以像这样简单地应用检查:*ngIf="firstName.touched"

像这样更改您的模板:

<form 
  #customForm="ngForm" 
  (ngSubmit)="alpha(customForm)">
  <input 
    type="text" 
    name="firstName" 
    ngModel 
    #firstName="ngModel" 
    required>
  <br/>
  <div 
    class="red" 
    *ngIf="firstName.touched">
    <div 
      *ngIf="firstName.errors.required">
      Input field is required!
    </div>
  </div>
  <button 
    type="submit" 
    [disabled]="customForm.invalid">
    Submit
  </button>
</form>

这里有一个 Working StackBlitz 供您参考。

您不需要使用 customForm 您直接通过 #firstName

获得了参考
  <div class="red" *ngIf="firstName.touched">
    <div *ngIf="firstName.errors.required">
      Input field is required!
    </div>
  </div>

但是当表单控件有效时,firstName.errors.required 仍然会抛出错误,您可以使用 ?. 运算符,或者您需要像这样更新 ngIf 表达式

<div class="red" *ngIf="firstName.touched && firstName.invalid">

或者您可以使用“?.”运算符

  <div *ngIf="firstName.errors?.required">Input field is required!</div>

When the form Control is valid the errors property will be null

stackblitz demo