Chciałbym markAsDirty
wszystkie elementy sterujące wewnątrz pliku FormGroup
.
Chciałbym markAsDirty
wszystkie elementy sterujące wewnątrz pliku FormGroup
.
Odpowiedzi:
Okazało się, że Object.keys
sobie z tym poradzę
Object.keys(this.form.controls).forEach(key => {
this.form.get(key).markAsDirty();
});
W przypadku Angular 8+ użyj następującego (na podstawie odpowiedzi Michała Anioła):
Object.keys(this.form.controls).forEach(key => {
this.form.controls[key].markAsDirty();
});
Warto, jest inny sposób na zrobienie tego bez konieczności używania magii Object.keys (...) :
for (const field in this.form.controls) { // 'field' is a string
const control = this.form.get(field); // 'control' is a FormControl
}
Przyjęta odpowiedź jest prawidłowa dla płaskiej konstrukcji formy, ale nie odpowiada w pełni na pierwotne pytanie. Strona internetowa może wymagać zagnieżdżonych FormGroups i FormArrays i musimy wziąć to pod uwagę, aby stworzyć solidne rozwiązanie.
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
zawsze działać po transpozycji przez maszynopis?
instanceof
nie jest słowem kluczowym specyficznym dla języka TypeScript ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) Nie jest też class
typem danych.
Korzystając z @Marcos answer, stworzyłem funkcję, którą można nazwać przekazując parametr formGroup jako parametr i zaznacza ona wszystkie kontrolki podrzędne formGroup jako brudne, aby umożliwić jej użycie z większej liczby miejsc w kodzie, na przykład umieszczając ją w usłudze.
public touchAllFormFields(formGroup: FormGroup): void {
Object.keys(formGroup.controls).forEach((key) => {
formGroup.get(key).markAsDirty();
});
}
mam nadzieję, że to pomoże ;)
Wygląda na to, że get
funkcja nie działa już przy pobieraniu określonych wartości w formularzu w Angular 8, więc tak to rozwiązałem na podstawie odpowiedzi @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();
});
Tworzę tę funkcję, aby * * Mam kontrolkę z nazwą 'order' i przekazałem mu indeks.
{"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.
Czy ktoś wie dlaczego?