Angular 指向嵌套FormGroup的变量

Angular 指向嵌套FormGroup的变量,angular,formgroups,Angular,Formgroups,我很惊讶,我没有遇到一个问题,询问如何指向嵌套在另一个FormGroup中的FormGroup。当您继续以这种方式引用嵌套的表单组以访问其中的对象时,它会变得令人讨厌和乏味 <FromGroup>.controls['FormGroupName'].controls['FormGroupName]...etc. 上述两个示例都不起作用,因为它返回了一个关于AbstractControls的错误。我的解决方案范围非常有限,仅限于typescript。查看web和angular网站上的

我很惊讶,我没有遇到一个问题,询问如何指向嵌套在另一个FormGroup中的FormGroup。当您继续以这种方式引用嵌套的表单组以访问其中的对象时,它会变得令人讨厌和乏味

<FromGroup>.controls['FormGroupName'].controls['FormGroupName]...etc.

上述两个示例都不起作用,因为它返回了一个关于AbstractControls的错误。

我的解决方案范围非常有限,仅限于typescript。查看web和angular网站上的其他示例,它演示了如何使用“formGroupName”来引用HTML中处理嵌套formGroup控件的区域

无法将“AbstractControl”分配给类型“FormGroup”。类型“AbstractControl”中缺少属性“controls”。我的印象是FormGroup、FormControls和FormArray都是抽象控件

这意味着TypeScript不同意将
this.parentForm.get('nestedFormName')
返回的值赋给
FormGroup
类型的变量。错误中说明了原因:因为,TypeScript不可能知道实际返回的是
FormGroup
。它可能是一个FormGroup。但它也可以是其他的东西(例如FormControl或FormArray)。你知道,但编译器不知道。因此,您必须使用类型断言告诉编译器,您知道返回的AbstractControl确实是一个
FormGroup

nestedForm = this.parentForm.get('nestedFormName') as FormGroup;
举一个简单的例子,假设您有一个水果篮类,您要求它在篮子中的某个位置获取水果

您当然可以这样做:

const fruit: Fruit = basket.get(i);
但你不能这么做:

const banana: Banana = basket.get(i);
因为TypeScript不知道位置i的水果是香蕉、苹果还是梨。可能是其中的任何一个。所以,如果您知道香蕉在位置i,那么您需要告诉TypeScript:

const banana: Banana = basket.get(i) as Banana;

我使用表单生成器创建与每个表单组关联的变量。我希望通过嵌套表单组的名称快速引用HTML代码中的每个嵌套表单,而不是从最上面的父表单开始调用每个嵌套表单,直到找到正确的表单。它返回一个关于AbstractControls的错误:您需要阅读此错误才能理解它。如果您仍然不理解它,请逐字发布,因为它所说的内容很重要。错误表明不能将“AbstractControl”类型分配给“FormGroup”类型。类型“AbstractControls”中缺少属性“controls”。我的印象是FormGroup、FormControls和FormArray都是抽象控件。
const banana: Banana = basket.get(i) as Banana;