Eckige 2-form Validierungen start-Datum <= Ende-Datum
Ich versuche zum hinzufügen von Validierungen, so dass das Ende-Datum kann nicht vor dem Startdatum. Ich habe leider keine Idee, wie das zu tun, und ich fand keine hilfreichen Tipps im internet so weit. Meine form sieht wie folgt aus:
editAndUpdateForm(tageler: Tageler) {
this.tageler = tageler;
this.tagelerForm = this.fb.group({
title: [this.tageler.title, Validators.required],
text: this.tageler.text,
group: [[this.tageler.group], Validators.required],
date_start: new Date(this.tageler.start).toISOString().slice(0, 10),
date_end: new Date(this.tageler.end).toISOString().slice(0, 10),
...
});
this.tagelerForm.valueChanges
.subscribe(data => this.onValueChanged(data));
}
Meine Validierungen bisher:
onValueChanged(data?: any) {
if (!this.tagelerForm) {
return;
}
const form = this.tagelerForm;
for (const field in this.formErrors) {
//clear previous error message (if any)
this.formErrors[field] = '';
const control = form.get(field);
if (control && control.dirty && !control.valid) {
const messages = this.validationMessages[field];
for (const key in control.errors) {
this.formErrors[field] += messages[key] + ' ';
}
}
}
}
validationMessages = {
'title': {
'required': 'Geben Sie bitte einen Namen ein.',
},
'group': {
'required': 'Wählen Sie bitte eine Gruppe aus.'
},
'bringAlong': {
'required': 'Bitte Feld ausfüllen.'
},
'uniform': {
'required': 'Bitte Feld ausfüllen.'
},
};
formErrors = {
'title': 'Geben Sie bitte einen Namen ein.',
'group': 'Wählen Sie bitte eine Gruppe aus.',
'bringAlong': 'Bitte Feld ausfüllen',
'uniform': 'Bitte Feld ausfüllen',
};
Den form-controls 'date_start' & 'date_end' enthalten ein Datum-string der form 'dd.MM.yyyy', und ich will 'date_end' größer oder gleich 'date_start'.
Möchte ich direkt Anzeige der Fehlermeldung (mein html-code sieht so aus:)
<label for="formControlName_date_end" class="col-3 col-form-label">Ende:</label>
<div class="col-5">
<input id="formControlName_date_end" class="form-control" formControlName="date_end" type="date" value="{{tageler.end | date: 'yyyy-MM-dd'}}">
</div>
<div *ngIf="formErrors.date_end" class="alert alert-danger">
{{ formErrors.date_end }}
</div>
Könnte mir jemand helfen?
Dank!
InformationsquelleAutor Ramona | 2017-05-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
wir nicht tun es in der Validierung, denn wir brauchen zwei Werte, die startdate und enddate für den Vergleich. So ist es besser, zu vergleichen zwei Daten in der Komponente
In Ihre html -
kannst du bitte markieren Sie es als Antwort, @Ramona
obwohl, es zeigt sich die Fehlermeldung der Formularvalidierung noch zurück "gültig" ist es ein Weg, um Einfluss auf die Reale form der Validierung?
Dies wird nur Benachrichtigen Sie uns die Fehler, die wir ausgewählt haben kleinere end-Datum, dann start-Daten,aber wird nicht verhindern, dass das Absenden des Formulars selbst.
InformationsquelleAutor sainu
Basiert auf der Antwort von santiagomaldonado habe ich eine generische ValidatorFn, die verwendet werden können in mehrere Reaktive Formen mit einem dynamischen Wert zurück.
Importieren Sie die Prüfung und es verwenden, wie Sie dies in Ihrem formgroup Prüfungen.
Nun können Sie die Validierung in HTML.
InformationsquelleAutor Sander Oosterwijk
Kann man es auch mit Reaktiven Formen.
Die FormBuilder-API ermöglicht Ihnen das hinzufügen von eigenen Prüfungen.
Beispiel:
Beachten Sie, dass ich den Vergleich der Werte an den Eingängen Datum und von mit >, aber standardmäßig wäre dies vergleichen von strings.
In der live-Beispiel, das ich verwende Winkel-Datum-Wert-accessor und importieren Sie die Richtlinie useValueAsDate.
Dieser Richtlinie Gruppe.Steuerelemente[aus].Wert und Gruppe.Steuerelemente[,].Wert gibt Datum und dann kann ich Sie vergleichen mit <.
Live-Beispiel in plunkr
Credits zu Dave ' s Antwort
InformationsquelleAutor gabrielgiussi
erstellen Sie eine Gruppe bilden . Lassen Sie die Steuerelemente ein Teil der Gruppe bilden .
InformationsquelleAutor Darshi Angolkar
Bin ich mit dem moment, und im Winkel 7, zu vergleichen und zu validieren, Daten, verwende ich diese Funktion:
InformationsquelleAutor Ivica Buljević
Mir ist angular7 + ngprime(für Kalender)
(*wenn Sie nicht möchten, ngprime ersetzen Sie einfach den Kalender-Teil zum anderen.)
Siehe unten code für Datums-Validierung.
Mein code hat eine zusätzliche überprüfung, dass
beginnen Sie einmal das Datum ausgewählt ist, ich block den vergangenen Tagen in end-Daten-Kalender
so, dass das Ende-Datum wird immer später.
wenn Sie nicht wollen, zu blockieren, Datum, löschen [minDate] Teil.
es ist auch arbeiten.
> Komponente
> HTML
InformationsquelleAutor Energy