我在子组件中有多个formcontrols,如何在子组件中应用验证器,因此原始表单将变为无效.使用ControlValueAccessor实现它是理想的,但是想从简单的@input表单组开始.
@Component({
selector: 'my-child',
template: `
<h1>Child</h1>
<div [formGroup]="childForm">
<input formControlName="firstName">
<input formControlName="lastName">
</div>
`
})
export class Child {
@Input()
childForm: FormGroup;
}
Run Code Online (Sandbox Code Playgroud)
Ano*_* Me 12
我不知道为什么这个问题被投票,但我觉得它可能对其他人有帮助所以我发布了答案.在多次尝试绑定子表单组后,我能够成功绑定值
@Component({
selector: 'my-child',
template: `
<h1>Child</h1>
<div [formGroup]="name">
<input formControlName="firstName">
<input formControlName="lastName">
</div>
`,
providers: [
{provide: NG_VALUE_ACCESSOR, useExisting: Child, multi: true}
]
})
export class Child implements ControlValueAccessor {
name: FormGroup;
constructor(fb: FormBuilder) {
this.name = fb.group({
firstName:[''],
lastName: ['']
});
}
writeValue(value: any) {
if(value) {
this.name.setValue(value);
}
}
registerOnChange(fn: (value: any) => void) {
this.name.valueChanges.subscribe(fn);
}
registerOnTouched() {}
}
Run Code Online (Sandbox Code Playgroud)
http://plnkr.co/edit/ldhPf7LTFVtTFHe9zfAj?p=preview
起初,这对我帮助很大,但后来我发现,我们把事情复杂化了。我们不必构建自己的 formControl,只需将 formGroup 传递给我们的子组件即可。在父组件中,而不是
this.form = fb.group({
name:['Angular2 (Release Candidate!)'],
username: [{firstName: 'First', lastName: 'Last'}],
email:['My Email']
});
Run Code Online (Sandbox Code Playgroud)
我们将 username 初始化为 FormGroup 而不是控件:
this.form = fb.group({
name:['Angular2 (Release Candidate!)'],
username: fb.group({
firstName: ['First'],
lastName: ['Last']
}),
email:['My Email']
});
Run Code Online (Sandbox Code Playgroud)
在子组件中,我们需要 FormGroup 的 Input 属性
@Input()
usernameGroup: FormGroup;
Run Code Online (Sandbox Code Playgroud)
在子模板中:
<div [formGroup]="usernameGroup">
<input formControlName="firstName">
<input formControlName="lastName">
</div>
Run Code Online (Sandbox Code Playgroud)
然后在父模板中:
<my-child [usernameGroup]="form.controls.username"></my-child>
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看此帖子:https : //scotch.io/tutorials/how-to-build-nested-model-driven-forms-in-angular-2
在这里构建自己的 formControl 真的是一种矫枉过正,有关更多信息,请查看此处:http : //blog.thoughtram.io/angular/2016/07/27/custom-form-controls-in-angular-2 .html
| 归档时间: |
|
| 查看次数: |
7613 次 |
| 最近记录: |