Angular AOT编译错误:属性'长度'在类型' AbstractControl'上不存在

时间:2017-03-23 06:26:33

标签: angular

我的应用运行正常。我想使用AOT加速加载应用程序,并且由于检查FormA而导致ngc和AOT设置出现编译错误

在打字稿中,我的表单带有FormArray字段:

  private buildForm() {
    this.taskForm = this.formBuilder.group({
      questions: this.formBuilder.array([
      ])
    }
  }

在模板中:

<h3 *ngIf="taskForm.get('questions').length < 1" >Render Decision</h3>

AOT编译:

 node_modules/.bin/ngc -p src/tsconfig-aot.json

错误:

my-component.component.ngfactory.ts:4530:59: Property 'length' does not exist on type 'AbstractControl'.

2 个答案:

答案 0 :(得分:6)

我通过将.get()的结果手动转换为FormArray找到了此问题的解决方案。 它在Github问题中有所描述,但我会在这里重复一遍以获得良好的衡量标准。

在控制器中提供一个getter:

get formArray() {
  // Typecast, because: reasons
  // https://github.com/angular/angular-cli/issues/6099
  return <FormArray>this.form.get('formArray');
}

在您的模板中,您现在可以访问FormArray

的正确属性和方法

e.g:

[disabled]="formArray.length > 0 && formArray.at(formArray.length - 1).invalid"

答案 1 :(得分:1)

我认为应该是

<h3 *ngIf="taskForm.get('questions').controls.length < 1" >Render Decision</h3>