类型“ AbstractControl”上不存在属性“控件”。角度7

时间:2018-11-08 12:56:11

标签: javascript angular typescript angular7

我在运行 ng build -aot 时仍然遇到相同的构建错误
生成错误表明类型'AbstractControl'不存在属性'controls'。

我的表格如下所示 component.ts

HTML看起来像这样 component.html

1 个答案:

答案 0 :(得分:0)

链接很多!

FromGroup具有格式为controls: { [key: string]: AbstractControl; }的属性。这意味着,在您的HTML中,当您编写createUserForm.controls.password时,AOT编译器将其理解为类型AbstractControl的对象-反过来, not 不会声明一个属性名为controls

现在,编译器无法理解您的password组是实际的FormGroup-它所了解的只是它是一个AbstractControl(可能是一个控件,组或数组)。为了向AOT编译器显示password实际上是一个组,您可以在组件文件中声明一个辅助获取器:

get passwordGroup(): FormGroup { return this.createUserForm.controls.password as FormGroup; }

然后可以转到HTML文件并正确找到子控件:

<app-validation-messages [control]="passwordGroup.controls.password" ></app-validation-messages>

所有这些,我个人不喜欢使用嵌套的组和控件。相反,您可以使app-validation-messages组件实现ControlValueAccessor接口,并使其提供NG_VALUE_ACCESSOR令牌。这样,您就可以使用formGroupNameformControlName指令来控制值:

<div formGroupName="password">
  <app-validation-messages formControlName="password"></app-validation-messages>
</div>