在嵌套反应形式中使用 setControl

Using setControl in nested reactive form

我想知道当我在另一个 formBuilder 组中有一个数组时,我必须做什么才能以反应形式使用 "setControl" 和 "get"。例如:

this.formulario = this.formBuilder.group({
  title: [this.racPessoa.title, [Validators.required]],
  description: [this.racPessoa.description, [Validators.required]],
  person: this.formBuilder.group({
    idPerson:[this.racPessoa.person.idPerson],
    name:[this.racPessoa.person.nome],
    personDocument: this.formBuilder.array([])
  }),
});

在上面的例子中,如果我想用"标题来处理,我可以这样写:

this.formulario.setControl('title', something);
this.formulario.get('title');

但是当我想处理人体内的"personDocument"时,我不知道如何写上面的两个句子

我试过使用:

this.formulario.setControl('person.personDocument', something);
this.formulario.get('person.personDocument')

但是没用。

FormGroupsetControl方法不支持嵌套的表单控件结构,它只会在当前层检测和设置表单控件,参见setControl and registerControl.

对于您的情况,this.formulario.setControl('person.personDocument', something); 只会将新的表单控件(key of person.personDocument)添加到您当前的图层(您可以在您的formGroup 的控件)。

this.formulario = this.formBuilder.group({
  title: [this.racPessoa.title, [Validators.required]],
  description: [this.racPessoa.description, [Validators.required]],
  person: this.formBuilder.group({
    idPerson:[this.racPessoa.person.idPerson],
    name:[this.racPessoa.person.nome],
    personDocument: this.formBuilder.array([])
  }),
  'person.personDocument': something     // newly added form control
});

因此您需要在确切的层添加表单控件,例如:

(this.formulario.get('person') as FormGroup).setControl('personDocument', new FormControl('aaa'));