在嵌套反应形式中使用 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')
但是没用。
FormGroup
的setControl
方法不支持嵌套的表单控件结构,它只会在当前层检测和设置表单控件,参见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'));
我想知道当我在另一个 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')
但是没用。
FormGroup
的setControl
方法不支持嵌套的表单控件结构,它只会在当前层检测和设置表单控件,参见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'));