如何修复“未定义标识符'长度'”的错误,此错误在VS代码中出现,但代码按预期工作

时间:2019-04-23 14:12:06

标签: angular

在我的Angular应用中,如果FormGroup中的数组具有多个项目,则显示div。

这是我正在使用的代码:

*ngIf="employeeForm.get('skills').length>1

代码按预期工作(仅当数组长度大于1时才显示div)。

但是在VS代码中,上面的代码下出现了一条红线。 这是我得到的错误:

  

未定义标识符“长度”。 “ AbstractControl”不包含   这样的成员Angular

有人可以告诉我我该怎么做才能删除红线吗?

2 个答案:

答案 0 :(得分:2)

之所以会这样,是因为默认情况下,form.get('key')返回的AbstractControl类型没有length属性。您需要明确告诉返回的控件是FormGroup,FormControl,FormArray等(代码编辑器会看到此返回类型,并在尝试访问该返回类型中不存在的任何属性时尝试向您发出警告)。

为您准备像这样的吸气剂

get skills() {
    return this.emplyeeForm.get('skills') as FormArray
} 

您的看法如下:

<div *ngIf="skills.length>1"> ... </div>

这只是为了提高用户的可读性和编辑者的才智。如果返回的控件是FormArray,则在运行时它将具有length属性,并且您的代码将正确运行。

答案 1 :(得分:1)

定义您自己的吸气剂,以便您可以定义它具有和不具有的属性。

public get skills(): any[] // define your type here or keep this.
{
    return this.emplyeeForm.controls['skills']. value;
}

*ngIf="skills.length"