在Angular中,FormArrayName指令用于在父组件中定义一个FormArray控件,并在子组件中使用它。以下是一个示例解决方法:
父组件中的模板(parent.component.html):
父组件中的代码(parent.component.ts):
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, FormArray } from '@angular/forms';
@Component({
selector: 'app-parent',
templateUrl: './parent.component.html',
styleUrls: ['./parent.component.css']
})
export class ParentComponent implements OnInit {
parentForm: FormGroup;
constructor(private formBuilder: FormBuilder) {}
ngOnInit() {
this.parentForm = this.formBuilder.group({
items: this.formBuilder.array([])
});
}
get items() {
return this.parentForm.get('items') as FormArray;
}
// 添加子项到FormArray
addItem() {
const item = this.formBuilder.group({
// 在子组件中使用的表单控件
name: [''],
age: ['']
});
this.items.push(item);
}
// 移除FormArray中的子项
removeItem(index: number) {
this.items.removeAt(index);
}
}
子组件中的模板(child.component.html):
子组件中的代码(child.component.ts):
import { Component, Input } from '@angular/core';
import { FormGroup } from '@angular/forms';
@Component({
selector: 'app-child',
templateUrl: './child.component.html',
styleUrls: ['./child.component.css']
})
export class ChildComponent {
@Input() childForm: FormGroup;
}
在父组件中,我们使用FormBuilder创建了一个包含FormArray的父表单。然后,我们将FormArray的每个控制项传递给子组件,并在子组件中使用FormArray的每个控制项。
在子组件中,我们使用Input装饰器接收父组件传递的FormArray控制项,并在子组件的模板中使用它来绑定表单控件。
通过这种方式,我们可以在子组件中使用FormArray中的表单控件,并将数据传递给父组件进行处理。