【发布时间】:2017-05-03 11:11:15
【问题描述】:
我有多个组件,每个组件都有一些输入、选择和其他表单元素。这所有元素都是使用模板驱动的表单开发的。
但以前它不是以组件方式开发的,因此我们能够检查表单状态。现在,由于我们已经按组件划分了所有内容,但验证我们无法获得它。
我有两个问题。
为了将子组件表单元素获取到父组件,我使用 ControlValueAccessor,这是正确的做法吗?在我的子组件中,我有多个表单控件,例如输入、选择和其他。
简单的验证,比如对输入元素的要求,它在子组件中不起作用。我该怎么办?
这是Plunkr,主要展示了我想要实现的目标。
@Component({
selector: 'my-child',
template: `
<h1>Child</h1>
<input [ngModel]="firstName" (ngModelChange)="firstSet($event)" required>
<input [ngModel]="lastName" (ngModelChange)="lastSet($event)" required> <!-- required validation is not working -->
`,
providers: [
{provide: NG_VALUE_ACCESSOR, useExisting: Child, multi: true}
]
})
export class Child implements ControlValueAccessor, OnChanges {
private firstName: string,
private lastName: string;
fn: (value: any) => void;
constructor(){
}
writeValue(value: any) {
console.log("write value");
console.log(value);
if(value){
this.firstName = value.firstName;
this.lastName = value.lastName;
}
}
registerOnChange(fn: (value: any) => void) {
this.fn = fn;
}
registerOnTouched() {}
firstSet(v: string){
this.firstName = v;
this.fn({
firstName: this.firstName,
lastName: this.lastName
});
}
lastSet(v: string){
this.lastName = v;
this.fn({
firstName: this.firstName,
lastName: this.lastName
});
}
}
如果您发现错误的方法,请说明哪种方法是正确的?
注意:请提出适用于模板驱动表单的解决方案。,我忘了提及我使用的是 Angular 2.4.8 版本。
【问题讨论】:
标签: javascript forms angular validation