だから私は、エラーなしでコンパイルコードを持っていますが、私はエラーを与えています使用している場合、その後...FormArrayを正しく使用していますか?
マイフォームコンポーネント:
export class OrderHeaderComponent implements OnInit {
orderForm: FormGroup;
orderLines: FormArray;
ngOnInit() {
// build the form model
this.orderLines = this.fb.array([])
this.orderForm = this.fb.group({
orderHeadForm: this.fb.group({ // create nested formgroup to pass to child
selectTypeahead: ['',
Validators.required],
ohReference: ['',
Validators.required],
}),
orderLines: this.orderLines,
})
}
someFunction(){
this.orderLines.push(this.fb.group({
['newInputName']: ['',
Validators.required],
}));
}
}
は今、これはにフォームを渡す親コンポーネントであり、さまざまな子供たち(これは私が現在取り組んでいるformArray部分を除いて動作します)。それぞれの子は、次のようになります。 parent_template:
<form [formGroup]="orderForm" (ngSubmit)="orderFormSubmit()">
<childTemplate [orderHeadForm]="orderForm.controls.orderHeadForm">
</childTemplatet>
</form>
子供テンプレート:
<div class="form-group" [formGroup]="orderHeadForm">
<label for="oh-custaccount">Customer Account #</label>
<input class="form-control" type="text"
formControlName="selectTypeahead"
(focusout)=lookupCustomerAccountReactive() />
<p *ngIf="orderHeadForm.controls.selectTypeahead.errors?.required"
style="color:red;">Number required!</p>
</div>
子コンポーネント:この時点で今
export class CustomerSelect implements OnInit {
@Input() orderHeadForm: FormGroup;
....
}
、私も新しいレンダリングしようとしていないのですformArrayから入力フォームを作成すると、エラーなしで作成したいので、後でテンプレートを作成できます。
しかし、私、私は次の場合に
ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '{
"orderHeadForm": {
"selectTypeahead": "",
"ohReference": ""
},
"orderLines": []
}'. Current value: '{
"orderHeadForm": {
"selectTypeahead": "",
"ohReference": ""
},
"orderLines": [
{
"newInputName": ""
}
]
}'
は今、私はこのスレッドを見てきました。しかし、現在、私のアプリは、()注文ラインアレイに新しい項目を追加するとすぐに、私はsomeFunctionを呼び出すとクラッシュします30子コンポーネントがすべてこれを必要としていると言うことがあります。おそらく、フォームのセットアップ/構築に何か問題があります。私は間違って/フォームの配列を間違って使用していますか?ドキュメントに記載されている修正についての言及はなく、私のユースケースはユニークです。
@ AJT_82「これは正しく使用していますか?」それは私を捨てました、そしてエラーがJSONにあったという事実。引っ込められた私は自分の意思決定をする前に、これらをさらに徹底的に読む必要があります。コーヒー... –
ああ、なぜ私はエラーを投げたのか分かったので、私の答えを削除しました。あなたのコードには間違いがあります。実際のコードの中にあるかどうかを確認してください。たとえば、 '['newInputName]'に '' 'がありません。私はあなたがそのエラーを得る理由を理解していないtho。しかし、あなたがリンクしている答えのように手動で変更検出を試みてください。 'orderLines'に新しいフォームグループを追加した後にそれを行います。もしあなたがプランナーで問題を再現しようとすることができれば、最高でしょう。 – Alex
@R。リチャーズ・ハハ、心配はありません。少なくとも私にとって何度も私にとっては最高のことです。P – Alex