首页 > 解决方案 > ngForm 与 A​​ngular 6 中的验证和子组件

问题描述

我有一个表格

    <form #basic="ngForm">
  <div>
    <label>Firstname:</label>
    <input type="text" name="firstName" ngModel required>
  </div>
  <div>
    <label>Lastname:</label>
    <input type="text" name="lastName" ngModel>
  </div>
  <address ></address>
</form>

并且在那种形式中有一个子组件 <address>,我想要验证父组件和子组件。我想用ngForm来做,我知道如何用formgroups来做,通过将表单变量传递给子组件,但我也试过了,但它给我一个错误

子组件

import { Component, Input } from '@angular/core';


@Component({
  selector: 'address',
  template: `

      <div>
        <label>Zip:</label>
        <input [ngClass]="{error: (basic.submitted)}" type="text" name="zip" ngModel>
      </div>
      <div>
        <label>Street:</label>
        <input type="text" name="street" ngModel required>
      </div>
      <div>
        <label>City:</label>
        <input type="text" name="city" ngModel>
      </div>

  `,

})
export class AddressComponent  {

}

标签: angular

解决方案


您需要像这样将表单变量传递给子组件

<form #basic="ngForm">
  <div>
    <label>Firstname:</label>
    <input type="text" name="firstName" ngModel required>
  </div>
  <div>
    <label>Lastname:</label>
    <input type="text" name="lastName" ngModel>
  </div>
  <address [basic]="basic"></address>
</form>

处理该变量并在子组件中导入 ControlContainer 和 NgForm

import { Component, Input } from '@angular/core';
import { ControlContainer, NgForm } from '@angular/forms';

@Component({
  selector: 'address',
  template: `

      <div>
        <label>Zip:</label>
        <input [ngClass]="{error: (basic.submitted)}" type="text" name="zip" ngModel>
      </div>
      <div>
        <label>Street:</label>
        <input type="text" name="street" ngModel required>
      </div>
      <div>
        <label>City:</label>
        <input type="text" name="city" ngModel>
      </div>

  `,
  viewProviders: [ { provide: ControlContainer, useExisting: NgForm } ]
})
export class AddressComponent  {
  @Input() basic;
}

现在它将处理组件父组件和子组件的验证。

stackblitz.com/edit/angular-uee6gk


推荐阅读