Ich habe Probleme herauszufinden, wie alle Felder des Formulars als berührt markiert werden können. Das Hauptproblem ist, dass, wenn ich keine Felder berühre und versuche, einen Formularüberprüfungsfehler einzureichen, dieser nicht angezeigt wird. Ich habe einen Platzhalter für diesen Code in meinem Controller.
Meine Idee ist einfach:
- Benutzer klickt auf die Schaltfläche "Senden"
- Alle Felder werden als berührt markiert
- Fehlerformatierer führt erneut aus und zeigt Validierungsfehler an
Wenn jemand eine andere Idee hat, wie Fehler beim Senden angezeigt werden können, ohne eine neue Methode zu implementieren, teilen Sie diese bitte mit. Vielen Dank!
Meine vereinfachte Form:
<form class="form-horizontal" [formGroup]="form" (ngSubmit)="onSubmit(form.value)">
<input type="text" id="title" class="form-control" formControlName="title">
<span class="help-block" *ngIf="formErrors.title">{{ formErrors.title }}</span>
<button>Submit</button>
</form>
Und mein Controller:
import {Component, OnInit} from '@angular/core';
import {FormGroup, FormBuilder, Validators} from '@angular/forms';
@Component({
selector : 'pastebin-root',
templateUrl: './app.component.html',
styleUrls : ['./app.component.css']
})
export class AppComponent implements OnInit {
form: FormGroup;
formErrors = {
'title': ''
};
validationMessages = {
'title': {
'required': 'Title is required.'
}
};
constructor(private fb: FormBuilder) {
}
ngOnInit(): void {
this.buildForm();
}
onSubmit(form: any): void {
// somehow touch all elements so onValueChanged will generate correct error messages
this.onValueChanged();
if (this.form.valid) {
console.log(form);
}
}
buildForm(): void {
this.form = this.fb.group({
'title': ['', Validators.required]
});
this.form.valueChanges
.subscribe(data => this.onValueChanged(data));
}
onValueChanged(data?: any) {
if (!this.form) {
return;
}
const form = this.form;
for (const field in this.formErrors) {
if (!this.formErrors.hasOwnProperty(field)) {
continue;
}
// clear previous error message (if any)
this.formErrors[field] = '';
const control = form.get(field);
if (control && control.touched && !control.valid) {
const messages = this.validationMessages[field];
for (const key in control.errors) {
if (!control.errors.hasOwnProperty(key)) {
continue;
}
this.formErrors[field] += messages[key] + ' ';
}
}
}
}
}
(<any>Object).values(formGroup.controls)
zuObject.keys(formGroup.controls).map(x => formGroup.controls[x])
(von stackoverflow.com/questions/42830257/… )