Angular版本:v4.2.x
我有一个包含子组件的表单:
parent.component.ts :
@Component({
template: `
<form #myForm="ngForm">
<child-component [parentForm]="myForm" [inputName]="'myName'"></child-component>
</form>
`
})
export class ParentComponent implements OnInit {
@ViewChild("myForm") myForm: NgForm;
}
child.component.ts :
@Component({
template: `
<input [name]="inputName" [(ngModel)]="petName"></input>
`
})
export class ChildComponent implements OnInit {
@Input("parentForm") parentForm: NgForm;
@Input("inputName") inputName: string;
petName: string;
ngOnInit() {
this.parentForm.valueChanges.subscribe(changes => {
console.log(JSON.stringify(changes));
});
}
}
在输入子输入字段时,我看不到控制台中的任何更改。但是,如果我将相同的代码从子节点移动到父节点并删除子组件,则在键入时将在控制台中输出更改。
有什么想法吗?谢谢!
答案 0 :(得分:3)
您可以尝试手动将ngModel
指令添加到父NgForm
:
<强> child.component.html 强>
<input [name]="inputName" #model="ngModel" [(ngModel)]="petName">
<强> child.component.ts 强>
export class ChildComponent implements OnInit {
...
@ViewChild("model") ngModel: NgModel;
ngOnInit() {
this.parentForm.addControl(this.ngModel); // <== add this
this.parentForm.valueChanges.subscribe(changes => {
console.log(JSON.stringify(changes));
});
}
}
<强> Plunker Example 强>