【问题标题】:Property 'controls' does not exist on type 'AbstractControl'. Angular 7“AbstractControl”类型上不存在属性“控件”。角 7
【发布时间】:2019-04-11 23:44:18
【问题描述】:

我在运行 ng build -aot 时不断收到相同的构建错误
构建错误说 “AbstractControl”类型上不存在属性“控件”。

我的表单看起来像这样 component.ts

HTML 看起来像这样 component.html

【问题讨论】:

标签: javascript angular typescript angular7


【解决方案1】:

这是很多链接!

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 令牌。这样做之后,您可以使用 formGroupNameformControlName 指令控制该值:

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

【讨论】:

    猜你喜欢
    • 2019-03-07
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2023-03-03
    • 2018-01-26
    • 2021-08-13
    • 1970-01-01
    • 2019-10-10
    相关资源
    最近更新 更多