如何 add/remove 来自嵌套 FormGroup 的 FormControl
How to add/remove FormControl from a nested FormGroup
candidateForm:FormGroup;
constructor(private fBuilder: FormBuilder){ }
ngOnInit(){
this.candidateForm = this.fBuilder.group({
fname: [null, [Validators.required]],
lname: [null, [Validators.required]],
address: this.fBuilder.group({
address1: [null],
address2: [null],
})
})
}
如何将名为address3
的FormControl添加到表单组address
?同样如何从同一个 FormGroup 中删除它们?
首先,您必须从主 FormGroup 获取子 FormGroup,然后您可以使用此处文档中引用的 addControl 和 removeControl:https://angular.io/api/forms/FormGroup.
所以你的情况是:
//Add:
this.candidateForm.get('address').addControl('address3',[]);
//Remove:
this.candidateForm.get('address').removeControl('address2');
我试过 Adhikari 的答案,但对我不起作用,它总是抛出错误:
error TS2339: Property 'addControl' does not exist on type 'AbstractControl'.
他的回答帮助我思考,最后我得出了这个结论:
写一个getter 属性这样的任何地方(得到组):
get addressGroup() { return this.candidateForm.get('address'); }
现在无论你想添加一些控件,像这样使用:
if(this.addressGroup instanceof FormGroup){
var ctrl:AbstractControl = this.fBuilder.control('', [Validators.required]);
(<FormGroup>this.addressGroup).addControl('address3', ctrl);
var emailCtrl:AbstractControl = this.fBuilder.control('', [Validators.email]);
(<FormGroup>this.addressGroup).addControl('myEmail', emailCtrl);
var add4:AbstractControl = this.fBuilder.control('', []);
(<FormGroup>this.addressGroup).addControl('address4', add4);
}
这是一个老问题,但希望这对某人有所帮助!
这对我有用:
(this.candidateForm.get('address') as FormGroup).addControl('address3', this.formBuilder.control(null));
(this.candidateForm.get('address') as FormGroup).removeControl('address3');
candidateForm:FormGroup;
constructor(private fBuilder: FormBuilder){ }
ngOnInit(){
this.candidateForm = this.fBuilder.group({
fname: [null, [Validators.required]],
lname: [null, [Validators.required]],
address: this.fBuilder.group({
address1: [null],
address2: [null],
})
})
}
如何将名为address3
的FormControl添加到表单组address
?同样如何从同一个 FormGroup 中删除它们?
首先,您必须从主 FormGroup 获取子 FormGroup,然后您可以使用此处文档中引用的 addControl 和 removeControl:https://angular.io/api/forms/FormGroup.
所以你的情况是:
//Add:
this.candidateForm.get('address').addControl('address3',[]);
//Remove:
this.candidateForm.get('address').removeControl('address2');
我试过 Adhikari 的答案,但对我不起作用,它总是抛出错误:
error TS2339: Property 'addControl' does not exist on type 'AbstractControl'.
他的回答帮助我思考,最后我得出了这个结论:
写一个getter 属性这样的任何地方(得到组):
get addressGroup() { return this.candidateForm.get('address'); }
现在无论你想添加一些控件,像这样使用:
if(this.addressGroup instanceof FormGroup){
var ctrl:AbstractControl = this.fBuilder.control('', [Validators.required]);
(<FormGroup>this.addressGroup).addControl('address3', ctrl);
var emailCtrl:AbstractControl = this.fBuilder.control('', [Validators.email]);
(<FormGroup>this.addressGroup).addControl('myEmail', emailCtrl);
var add4:AbstractControl = this.fBuilder.control('', []);
(<FormGroup>this.addressGroup).addControl('address4', add4);
}
这是一个老问题,但希望这对某人有所帮助!
这对我有用:
(this.candidateForm.get('address') as FormGroup).addControl('address3', this.formBuilder.control(null));
(this.candidateForm.get('address') as FormGroup).removeControl('address3');