Saya ingin markAsDirty
semua kontrol di dalam a FormGroup
.
Saya ingin markAsDirty
semua kontrol di dalam a FormGroup
.
Jawaban:
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();
});
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();
}
});
}
instanceof
selalu berfungsi setelah ditranspilasi oleh Typecript?
instanceof
bukanlah kata kunci khusus TypeScript ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) Begitu juga dengan class
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;)
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?