【发布时间】:2019-04-11 23:44:18
【问题描述】:
我在运行 ng build -aot 时不断收到相同的构建错误
构建错误说 “AbstractControl”类型上不存在属性“控件”。
我的表单看起来像这样 component.ts
HTML 看起来像这样 component.html
【问题讨论】:
-
你好。请张贴代码而不是图片。
标签: javascript angular typescript angular7
我在运行 ng build -aot 时不断收到相同的构建错误
构建错误说 “AbstractControl”类型上不存在属性“控件”。
我的表单看起来像这样 component.ts
HTML 看起来像这样 component.html
【问题讨论】:
标签: javascript angular typescript angular7
这是很多链接!
FromGroup 具有controls: { [key: string]: AbstractControl; } 形式的属性。这意味着,在您的 HTML 中,当您编写 createUserForm.controls.password 时,AOT 编译器会理解它是 AbstractControl 类型的对象 - 而 not 声明了一个名为 @987654327 的属性@!
现在,编译器无法理解您的 password 组是实际的 FormGroup - 它所理解的只是它是 AbstractControl(可能是控件、组或数组)。为了向 AOT 编译器显示 password 实际上是一个组,您可以在组件文件中声明一个辅助 getter:
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 令牌。这样做之后,您可以使用 formGroupName 和 formControlName 指令控制该值:
<div formGroupName="password">
<app-validation-messages formControlName="password"></app-validation-messages>
</div>
【讨论】: