angular - 角度反应形式 - 将 formArray 传递给子组件时出错
问题描述
我在其中嵌套了带有 formGroup 和 formArray 的反应式表单。
当我尝试将嵌套的 formArray 传递给子组件时,出现以下错误
FormArrayName 必须与父 formGroup 指令一起使用
下面是父表单组
this.employeeForm= this.fb.group({
employee: this.fb.group({
name: [null],
id: [null]
}),
address: this.fb.array({
location: [null],
city: [null]
});
});
父表单组件
<form [formGroup]="employeeForm">
<app-address [address]="employeeForm.controls.address"></app-address>
</form>
地址子组件html
<div [formArrayName]="address">
<div *ngFor="let item of address.controls;" [formGroupName]="i">
<input type="text" formControlName="location">
</div>
</div>
地址子组件 ts
import { Component, OnInit, Input } from '@angular/core';
import { FormGroup, FormArray } from '@angular/forms';
@Component({
selector: 'app-address',
templateUrl: './address.component.html',
styleUrls: ['./address.component.scss']
})
export class AddressComponent implements OnInit {
constructor() { }
@Input() address: FormArray;
ngOnInit() {
}
}
当我做 console.log(this.employeeForm)
请检查并提出建议时,整体表单值工作正常。谢谢你的帮助。
解决方案
代码看起来不错。问题在于您app-address
为子表单组使用自定义组件。
在嵌套组件中时,Angular 表单不会自动注册。但是,您可以通过向子组件提供外部 FormGroup 来解决此问题。
您还应该将formGroup
实例与控件名称一起传递给您的自定义组件。formGroup
然后在自定义组件下创建一个表单控件。formGroup
您的自定义组件将在您提供的相同控件下创建控件。
<app-address [address]="employeeForm.controls.identity" [formGroup]="yourFormGroup" [controlName]="controlName"></app-address>
在子组件中,您可以初始化表单:
ngOnInit() {
let control: FormControl = new FormControl('', Validators.required);
this.formGroup.addControl(this.controlName, control);
}
推荐阅读
- javascript - 如何从javascript数组中选择具有不同值的多个特定属性
- digital-ocean - 对于 Filezilla pro 中的文件,将 Digital Ocean Space 的默认上传更改为 Public
- postgresql - 将用户定义的类型数组作为输入参数传递给函数
- python - 3D 相对旋转
- python - 如何使用鸭嘴兽和 ReportLab Pdf python 创建链接和锚点
- dom - 如何使用 TSX 使 StencilJS 组件在没有组件标签的情况下呈现?
- r - 在谷歌地球引擎中写一个for循环
- javascript - 无法使用 Barba.js 和机车滚动向下滚动
- asp.net-mvc - Scaffold-DbContext 没有在 Generated 类上添加 [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
- json - 如何在 JMeter 5.3 中验证整个 JSON 响应?