我有一个嵌套的formgroup,如下所示:

this.formGroup: FormGroup: {
    // ...
    controls: {
        "GENERAL_AND_PERSONAL_QUESTIONS": { // FormGroup object... }
    }
}

在顶级表单组中,我可以轻松添加如下控件:
this.formGroup.addControl(tab.id, this.formBuilder.group({}));

但是,由于某些原因,无法向子窗体组添加任何控件。我试着这样添加它们:
// tab.id = "GENERAL_AND_PERSONAL_QUESTIONS";
this.formGroup.get(tab.id).addControl(segment.id, this.formBuilder.group({}));

但它总是抛出一个编译错误,说:
Property 'addControl' does not exist on type 'AbstractControl'.

非常感谢您的帮助:)

最佳答案

FormGroup中的扩展类具有addControl且此方法不属于父类AbstractControl的一部分。因此,当您使用方法get时,返回的元素是一个AbstractControl,而不是AbstractControl,因此您应该确保返回的元素是一个FormGroup,并将其正确转换为使用addcontrol方法。
考虑到这一点,可以使用addcontrol,在代码中添加如下内容:

abstractControl : AbstractControl = this.formGroup.get(tab.id);
if(abstractControl instanceof FormGroup){
    (<FormGroup>abstractControl).addControl(segment.id, this.formBuilder.group({}));
}

我这样做是为了澄清
举例说明我在上面代码中的意思。示例是src/app.ts中的test method

09-12 05:28