如何从嵌套的FormGroup添加/删除FormControl

Apa*_*ari 5 javascript angular2-forms

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],
      })
    })
  }
Run Code Online (Sandbox Code Playgroud)

如何添加命名address3到表单组的FormControl address?同样如何从同一FormGroup中删除它们?

Ere*_*rex 11

首先,您必须从主FormGroup获取子FormGroup,然后您可以在此处的文档中使用addControl和removeControl refrenced:https://angular.io/api/forms/FormGroup .

所以在你的情况下它将是:

//Add:
this.candidateForm.get('address').addControl('address3',[]);

//Remove:
this.candidateForm.get('address').removeControl('address2', null);
Run Code Online (Sandbox Code Playgroud)


Ric*_*iro 8

这对我有用:

(this.candidateForm.get('address') as FormGroup).addControl('address3', this.formBuilder.control(null));
(this.candidateForm.get('address') as FormGroup).removeControl('address3');
Run Code Online (Sandbox Code Playgroud)


Ali*_*avi 6

我尝试了 Adhikari 答案,但对我不起作用,它总是抛出错误:

error TS2339: Property 'addControl' does not exist on type 'AbstractControl'.
Run Code Online (Sandbox Code Playgroud)

他的回答帮助我思考,最后我得出了这个:

在任何地方编写一个 getter 属性(以获取组):

get addressGroup() { return this.candidateForm.get('address'); }
Run Code Online (Sandbox Code Playgroud)

现在,无论您想在何处添加一些控件,都可以像这样使用:

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);
}
Run Code Online (Sandbox Code Playgroud)

这是一个老问题,但希望这会对某人有所帮助!