2017-03-23 13 views
1

私のアプリは正常に動作します。私はアプリをロードするスピードアップするためにAOTを使用したいと私はFormArray場で私のフォームを持っているため、typescriptですでフォームAに角度AOTコンパイルエラー: '長さ'プロパティが 'AbstractControl'タイプに存在しません

をチェックするNGCおよびAOTの設定でコンパイルエラーを取得しています:

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'. 

答えて

0

は、私はそれは私が手動でFormArray.get()の結果をキャストすることによって、この問題への解決策を見つけた

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

感謝。それはそれが好きではなかった。 myComponent.component.ngfactory.ts:4530:59:プロパティ 'controls'は 'AbstractControl'タイプに存在しません。ところで、私はAngular 4.0.0-rc.3を使っています。 –

+0

これは実際には間違っています。 FormArrayのプロパティは「length」である必要があります。 https://angular.io/docs/ts/latest/api/forms/index/FormArray-class.html#!#length-anchor – FabianMeul

5

されるべきだと思います。 Githubの問題に説明されていますが、ここではこれを繰り返して適切な対策を講じます。

があなたのコントローラにゲッターを提供します:テンプレートで

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

を、あなたは今FormArrayの正しいプロパティとメソッドへのアクセス権を持っています。

例えば:

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

TypeScriptでのキャストに関する詳細は、http://acdcjunior.githubを参照してください。 io/typescript-cast-object-to-other-type-or-instanceof.html –

+0

この回答は正しいです。角度5.2.4でテスト済み – jeddai

関連する問題