Ich möchte markAsDirtyalle Steuerelemente in einem FormGroup.
Ich möchte markAsDirtyalle Steuerelemente in einem FormGroup.
Antworten:
Fand heraus, dass Object.keysdamit umgehen kann ..
Object.keys(this.form.controls).forEach(key => {
this.form.get(key).markAsDirty();
});
Verwenden Sie für Angular 8+ Folgendes (basierend auf der Antwort von Michelangelo):
Object.keys(this.form.controls).forEach(key => {
this.form.controls[key].markAsDirty();
});
Für das, was es wert ist, gibt es eine andere Möglichkeit, dies zu tun, ohne Object.keys (...) Magie verwenden zu müssen:
for (const field in this.form.controls) { // 'field' is a string
const control = this.form.get(field); // 'control' is a FormControl
}
Die akzeptierte Antwort ist für eine flache Formularstruktur korrekt, beantwortet jedoch die ursprüngliche Frage nicht vollständig. Für eine Webseite sind möglicherweise verschachtelte FormGroups und FormArrays erforderlich. Dies muss berücksichtigt werden, um eine robuste Lösung zu erstellen.
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();
}
});
}
instanceofimmer arbeiten , nachdem sie von Typoskript transpiled werden?
instanceofist kein TypeScript-spezifisches Schlüsselwort ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ). Auch der classDatentyp ist nicht .
Es scheint, dass die get Funktion zum Abrufen bestimmter Werte in Ihrem Formular in Angular 8 nicht mehr funktioniert. Daher habe ich sie auf der Grundlage der Antwort von @Liviu Ilea gelöst.
for (const field in this.myForm.controls) { // 'field' is a string
console.log(this.myForm.controls[field].value);
}
Mit der Antwort von @Marcos habe ich eine Funktion erstellt, die als Übergabe einer formGroup als Parameter aufgerufen werden kann. Sie markiert alle untergeordneten FormGroup-Steuerelemente als verschmutzt, um sie beispielsweise an mehreren Stellen im Code verwendbar zu machen, an denen sie in einen Dienst eingefügt wird.
public touchAllFormFields(formGroup: FormGroup): void {
Object.keys(formGroup.controls).forEach((key) => {
formGroup.get(key).markAsDirty();
});
}
ich hoffe es hilft ;)
Object.keys( this.registerForm.controls).forEach(key => {
this.registerForm.controls[key].markAsDirty();
});
Das ist es, was für mich funktioniert
private markFormGroupTouched(formGroup: FormGroup) {
Object.keys(formGroup.controls).forEach((key) => {
const control = formGroup.controls[key];
control.markAsDirty();
if ((control instanceof FormGroup)) {
this.markFormGroupTouched(control);
}
});
}
Ich erstelle diese Funktion, um sie zu erstellen. * Ich habe ein Steuerelement mit dem Namen 'order' und übergebe ihm den Index.
{"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.Weiß jemand warum?