Saya ingin markAsDirtysemua kontrol di dalam a FormGroup.
Saya ingin markAsDirtysemua kontrol di dalam a FormGroup.
Jawaban:
Ketemu yang Object.keysbisa menangani ini ..
Object.keys(this.form.controls).forEach(key => {
this.form.get(key).markAsDirty();
});
Untuk Angular 8+, gunakan yang berikut (berdasarkan jawaban Michelangelo):
Object.keys(this.form.controls).forEach(key => {
this.form.controls[key].markAsDirty();
});
Untuk apa nilainya, ada cara lain untuk melakukan ini tanpa harus menggunakan sihir Object.keys (...) :
for (const field in this.form.controls) { // 'field' is a string
const control = this.form.get(field); // 'control' is a FormControl
}
Jawaban yang diterima benar untuk struktur bentuk datar, tetapi tidak sepenuhnya menjawab pertanyaan awal. Halaman web mungkin memerlukan FormGroups dan FormArays bersarang, dan kita harus memperhitungkannya untuk membuat solusi yang kuat.
public markControlsDirty(group: FormGroup | FormArray): void {
Object.keys(group.controls).forEach((key: string) => {
const abstractControl = group.controls[key];
if (abstractControl instanceof FormGroup || abstractControl instanceof FormArray) {
this.markControlsDirty(abstractControl);
} else {
abstractControl.markAsDirty();
}
});
}
instanceofselalu berfungsi setelah ditranspilasi oleh Typecript?
instanceofbukanlah kata kunci khusus TypeScript ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) Begitu juga dengan classtipe datanya.
Dengan menggunakan jawaban @Marcos, saya membuat sebuah fungsi yang dapat disebut meneruskan formGroup sebagai parameter dan menandai setiap kontrol anak formGroup menjadi kotor, hanya untuk membuatnya dapat digunakan dari lebih banyak tempat di sekitar kode yang meletakkannya di dalam layanan, misalnya.
public touchAllFormFields(formGroup: FormGroup): void {
Object.keys(formGroup.controls).forEach((key) => {
formGroup.get(key).markAsDirty();
});
}
semoga membantu;)
Tampaknya get fungsi itu tidak berfungsi lagi untuk mengambil nilai tertentu dalam formulir Anda di Angular 8, jadi inilah cara saya menyelesaikannya berdasarkan jawaban dari @Liviu Ilea.
for (const field in this.myForm.controls) { // 'field' is a string
console.log(this.myForm.controls[field].value);
}
Object.keys( this.registerForm.controls).forEach(key => {
this.registerForm.controls[key].markAsDirty();
});
Saya membuat fungsi ini untuk membuatnya * Saya memiliki kontrol dengan nama 'order', dan memberikan indeks kepadanya.
{"conditionGroups": [
{
"order": null,
"conditions": []
}
]
}
updateFormData() {
const control = <FormArray>this.form.controls['conditionGroups'];
control.value.map((x,index)=>{
x.order = index;
})
Cannot invoke an expression whose type lacks a call signature. Type 'AbstractControl' has no compatible call signatures.Apakah ada yang tahu mengapa?