Saya ingin markAsDirty
semua kontrol di dalam a FormGroup
.
97
Ketemu yang Object.keys
bisa 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();
});
Cannot invoke an expression whose type lacks a call signature. Type 'AbstractControl' has no compatible call signatures.
Apakah ada yang tahu mengapa?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 }
sumber
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(); } }); }
sumber
instanceof
selalu berfungsi setelah ditranspilasi oleh Typecript?instanceof
bukanlah kata kunci khusus TypeScript ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) Begitu juga denganclass
tipe 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;)
sumber
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); }
sumber
Object.keys( this.registerForm.controls).forEach(key => { this.registerForm.controls[key].markAsDirty(); });
sumber
Inilah yang berhasil untuk saya
private markFormGroupTouched(formGroup: FormGroup) { Object.keys(formGroup.controls).forEach((key) => { const control = formGroup.controls[key]; control.markAsDirty(); if ((control instanceof FormGroup)) { this.markFormGroupTouched(control); } }); }
sumber
Saya membuat fungsi ini untuk membuatnya * Saya memiliki kontrol dengan nama 'order', dan memberikan indeks kepadanya.
sumber