Bir markAsDirtyiçindeki tüm kontrolleri istiyorum FormGroup.
Bir markAsDirtyiçindeki tüm kontrolleri istiyorum FormGroup.
Yanıtlar:
Bunu Object.keyshalledebileceğini öğrendim ..
Object.keys(this.form.controls).forEach(key => {
this.form.get(key).markAsDirty();
});
Angular 8+ için aşağıdakileri kullanın (Michelangelo cevabına göre):
Object.keys(this.form.controls).forEach(key => {
this.form.controls[key].markAsDirty();
});
Değeri ne olursa olsun, bunu Object.keys (...) sihrini kullanmak zorunda kalmadan yapmanın başka bir yolu var :
for (const field in this.form.controls) { // 'field' is a string
const control = this.form.get(field); // 'control' is a FormControl
}
Kabul edilen yanıt, düz bir form yapısı için doğrudur, ancak orijinal soruyu tam olarak yanıtlamaz. Bir web sayfası iç içe geçmiş FormGroups ve FormArrays gerektirebilir ve sağlam bir çözüm oluşturmak için bunu hesaba katmalıyız.
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();
}
});
}
instanceofhep typescript tarafından transpiled sonra işe?
instanceof, TypeScript'e özgü bir anahtar kelime değildir ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) classVeri türü de değildir.
@Marcos yanıtını kullanarak, bir formGroup'u parametre olarak iletmek olarak adlandırılabilecek bir işlev oluşturdum ve her formGroup alt kontrolünü kirli olarak işaretler, örneğin onu bir hizmetin içine koyarak kodun etrafındaki daha fazla yerden kullanılabilir hale getirmek için.
public touchAllFormFields(formGroup: FormGroup): void {
Object.keys(formGroup.controls).forEach((key) => {
formGroup.get(key).markAsDirty();
});
}
Umarım yardımcı olur ;)
Görünüşe göre bu get işlev, Angular 8'deki formunuzdaki belirli değerleri almak için artık çalışmıyor, bu yüzden @Liviu Ilea'nın cevabına dayanarak onu bu şekilde çözdüm.
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();
});
Bunu yapmak için bu işlevi yaratıyorum * 'order' adında bir kontrole sahibim ve indeksi ona iletiyorum.
{"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.Nedenini bilen var mı?