私はそのような反応型を持っています:
_constructor(...){
this.form = this.formBuilder.group({
name: ['', Validators.compose([Validators.required, Validators.maxLength(50)])],
memes: this.formBuilder.array([
this.initMemes('TrollFace')
])
});
}
initMemes (name?) {
return this.formBuilder.group({
id: [''], name: [name]
});
}
_
後でさらにmemes
を追加できます。
_addMemes () {
const control = <FormArray>this.form.controls['memes'];
control.Push(this.initMemes('anyName'));
}
_
そして、フォームの値を取得すると、次のようになります。
_this.form.controls['memes'].value
_-ここに配列があります
しかし、この_this.form.controls['memes'].value
_を空の配列に設定する必要がある場合、どうすれば可能ですか?
このように設定した場合:
this.form.controls['memes'].setValue([])
エラーが発生しました:_Must supply a value for form control at index: 0.
_
私は何を間違っていますか?
いくつかのことを試してみました:reset()
、setControl()
ですが、配列全体を実際に[]
にリセットする唯一の解決策は次のとおりですが、他のオプションは機能しましたが、彼らはフォームグループをそのまま残し、値を空にしました。
だから私がそれを機能させる方法は、フォーム配列を反復し、ループ内のその特定のインデックスを持つ各フォームグループを削除することでした:
const control = <FormArray>this.form.controls['memes'];
for(let i = control.length-1; i >= 0; i--) {
control.removeAt(i)
}
より良い方法がある場合は、提案をお待ちしています! :)
コンストラクターでインスタンス化されたformBuilderサービスでthis.myForm.controls['myFormArray'] = this.formBuilder.array([]);
を試してください。
[〜#〜]フォーム[〜#〜]
this.form = this._formB.group({
blocks: this._formB.array([])
});
1番目の方法
let fArray = <FormArray>this.form.controls['blocks'];
while (fArray.length !== 0) {
fArray.removeAt(0)
}
2番目の方法
this.form.setControl('blocks', this._formB.array([]));
私は同様の問題を抱えていましたが、フォームを更新した後にエラーが表示され、一連の調査と実験に失敗した後、this.myForm.updateValueAndValidity
ついにトリックを行いました。