属性AbstractControl在AbstractControl类型上不存在

时间:2017-11-29 14:44:11

标签: angular typescript angular-reactive-forms

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

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

到顶级FormGroup,我可以轻松添加如下控件:

this.formGroup.addControl(tab.id, this.formBuilder.group({}));

但是,对于子formGroup,由于某种原因我无法添加任何控件。我试着像这样添加它们:

// 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'.

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:3)

来自FormGroup

AbstractControl扩展类有addControl,此方法不属于父类AbstractControl。因此,当您使用方法get时,返回的元素为AbstractControl,而不是FormGroup,因此您应确保返回的元素为FormGroup并正确投射以供使用addControl方法。

考虑到这一点,您可以使用addControl,在代码中添加如下内容:

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

我做了这个plunker来澄清和 举例说明我在上面的代码中的含义。该示例位于src / app.ts

中的测试方法中