カスタムコントロールグループで動作する角度2のフォームがあります。現時点でフォームを提出すると、次の行のすべてのデータがコントローラに渡されます。コントロールグループ内のダーティ値のみを取得する角度2
(ngSubmit)="updateArtist(artistDetailForm.value)"
問題は、これがフォームのすべての値を渡し、フォームがかなり大きい場合、これは全く役に立たないと感じることです。変更された(汚れた)値だけを渡す可能性はありますか?
カスタムコントロールグループで動作する角度2のフォームがあります。現時点でフォームを提出すると、次の行のすべてのデータがコントローラに渡されます。コントロールグループ内のダーティ値のみを取得する角度2
(ngSubmit)="updateArtist(artistDetailForm.value)"
問題は、これがフォームのすべての値を渡し、フォームがかなり大きい場合、これは全く役に立たないと感じることです。変更された(汚れた)値だけを渡す可能性はありますか?
フォームを宣言してください。
this.artistDetailForm= formBuilder.group({......});
提出
// feed me controlGroups
getDirtyValues(cg) {
let dirtyValues = {}; // initialize empty object
Object.keys(cg.controls).forEach((c) => {
let currentControl = cg.find(c);
if(currentControl.dirty){
if(currentControl.controls) //check for nested controlGroups
dirtyValues[c] = getDirtyValues(currentControl); //recursion for nested controlGroups
else
dirtyValues[c] = currentControl.value; //simple control
}
});
return dirtyValues;
}
に値を抽出し、その後、私は少しまし角度フォームへの新しい変更により、この
(ngSubmit)="updateArtist(getDirtyValues(artistDetailForm))"
を行うための関数を定義します。受け入れられた答えを修正しました。誰かが興味を持っていると分かち合うことを決めた。 (角4+を使用)
getDirtyValues(form: any) {
let dirtyValues = {};
Object.keys(form.controls)
.forEach(key => {
let currentControl = form.controls[key];
if (currentControl.dirty) {
if (currentControl.controls)
dirtyValues[key] = this.getDirtyValues(currentControl);
else
dirtyValues[key] = currentControl.value;
}
});
return dirtyValues;
}