【问题标题】:Angular reactive form validate nested fieldsAngular 反应式表单验证嵌套字段
【发布时间】:2019-06-24 02:48:49
【问题描述】:

我正在使用 Angular 7

我有一个嵌套的响应式表单

this.salonProfileForm = this.fb.group({
  salonName: new FormControl('', [Validators.required]),
  address: this.fb.group({
    city: new FormControl('', [Validators.required])
  })
});

get f() {
    return this.salonProfileForm.controls;
}

我有类似的 HTML 表单

<input type="text" formControlName="salonName" required />
<ng-container *ngIf="submitted && f.salonName.invalid && (f.salonName.dirty || f.salonName.touched)">
   <small *ngIf="f.salonName.errors.required">
      Salon name is required
   </small>
</ng-container>

<div formGroupName="address">
  <input type="text" formControlName="city" />
  <ng-container *ngIf="submitted && f.city.invalid && (f.city.dirty || f.city.touched)">
    <small *ngIf="f.city.errors.required">
        city is required
    </small>
  </ng-container>
</div>

但这会导致城市输入 ng-container 字段出现错误

ERROR TypeError: Cannot read property 'invalid' of undefined

如何验证嵌套输入字段?

console.log(this.f.address)

【问题讨论】:

    标签: angular angular-reactive-forms


    【解决方案1】:

    你必须像下面这样访问:

    f.address.controls.city.invalid
    

    编辑

    export class Home implements OnInit {
      salonProfileForm : FormGroup;
    
      ngOnInit() {
        this.salonProfileForm = new FormGroup({
          'salonName': new FormControl('', [Validators.required]),
          'address': new FormGroup({
            'city': new FormControl('', [Validators.required])
        })
      });
     }
    
    }
    

    移至.html 模板

    <form [formGroup]="salonProfileForm " (ngSubmit)="onSubmit()">
    
    <div formGroupName="address">
      <input type="text" formControlName="city" />
      <ng-container *ngIf="!salonProfileForm.get('address.city').valid && salonProfileForm.get('address.city').touched">
        <span>This is required</span>
      </ng-container>
    </div>
    
    </form>
    

    我已经粘贴了它可以工作的形状,所以请随时更新您的代码以适应上述情况。

    【讨论】:

    • 仍然给出同样的错误。 webstorm 编辑器也给出了unresolved variable city 错误。
    • console.log(f.address) 告诉我输出结果
    • 嘿,在运行命令ng build --prod 时,它会在我进行上述错误检查的那一行出现错误“属性“控件”不存在于类型“AbstractControl”上。
    • stackblitz.com/edit/angular-rq8z9j 检查 html 和 ts 内容
    • @AnujTBE 尝试为你得到的最后一个错误添加一个不同的问题,也许它与这个答案无关
    猜你喜欢
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 2018-03-13
    • 2017-08-13
    相关资源
    最近更新 更多