Vorrei markAsDirty
tutti i controlli all'interno di un file FormGroup
.
Vorrei markAsDirty
tutti i controlli all'interno di un file FormGroup
.
Risposte:
Ho scoperto che Object.keys
può gestire questo ..
Object.keys(this.form.controls).forEach(key => {
this.form.get(key).markAsDirty();
});
Per Angular 8+, usa quanto segue (basato sulla risposta di Michelangelo):
Object.keys(this.form.controls).forEach(key => {
this.form.controls[key].markAsDirty();
});
Per quello che vale, c'è un altro modo per farlo senza dover usare la magia Object.keys (...) :
for (const field in this.form.controls) { // 'field' is a string
const control = this.form.get(field); // 'control' is a FormControl
}
La risposta accettata è corretta per una struttura a modulo piatto, ma non risponde completamente alla domanda originale. Una pagina web può richiedere FormGroup e FormArrays annidati e dobbiamo tenerne conto per creare una soluzione robusta.
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
sempre dopo essere stato trasferito da Typescript?
instanceof
non è una parola chiave specifica di TypeScript ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) Nemmeno il class
tipo di dati.
Usando la risposta di @Marcos ho creato una funzione che può essere chiamata passando un formGroup come parametro e contrassegna ogni controllo figlio di formGroup come sporco, solo per renderlo utilizzabile da più punti attorno al codice inserendolo all'interno di un servizio, ad esempio.
public touchAllFormFields(formGroup: FormGroup): void {
Object.keys(formGroup.controls).forEach((key) => {
formGroup.get(key).markAsDirty();
});
}
spero che sia d'aiuto ;)
Sembra che la get
funzione non funzioni più per il recupero di valori specifici nel modulo in Angular 8, quindi è così che l'ho risolto in base alla risposta di @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();
});
Creo questa funzione per renderlo * Ho un controllo con nome "order" e gli passo l'indice.
{"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.
Qualcuno sa perché?