我有一个处理输入控件数组的子组件。我想要一个窗体控件来控制子组件。
我正在传递json对象的数组,这是将父窗体绑定到子组件的form array的正确方法,该formarray具有2个表单控件,并且首先需要验证器。
这是初始代码
<h1>Child</h1>
<div formArrayName="names">
<div *ngFor="let c of names.control">
<input formControlName="firstName">
<input formControlName="lastName">
</div>
</div>
目的是将父窗体与子组件中的输入控件数组绑定。如果子组件中的某个输入控件没有必需字段,则窗体也将变为无效。
http://plnkr.co/edit/HznCJfSEiSV28ERqNiWr?p=preview
最佳答案
您必须使用formArrayName
指令和*ngFor
如下:
<form [formGroup]="form" (ngSubmit)="sayHello()">
<input formControlName="name"><br>
<input formControlName="email"><br>
<div formArrayName="username">
<div *ngFor="let user of username.controls; let i=index">
<my-child formControlName="i"></my-child>
</div>
</div>
<button type="submit">Register</button>
</form>
对于
FormBuilder
你也必须使用FormArray
。form = new FormGroup({
name: new FormControl('My Name'),
username: new FormArray([
new FormControl("value"),// ControlValueAccesor is applied only to one control, not two. So you cannot use javascript object like you are using below this line.
{firstName:"Anna", lastName:"Smith"},
{firstName:"Peter", lastName:"Jones"}
])
});
有关详细信息,see this doc.
案例2:通过表单组:
form = new FormGroup({
name: new FormControl('My Name'),
username: new FormArray([
new FormGroup({
firstName: new FormControl('Anna'),
lastName: new FormControl('Smith')
}),
new FormGroup({
firstName: new FormControl('Peper'),
lastName: new FormControl('Jones')
}),
])
})
如果您试图将formgroup作为ngmodel参数传递,则不能!
关于forms - Angular 2中带有FormArray的ControlValueAccessor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40439660/