Wenn Sie Validierungen implementieren möchten, die ein oder mehrere Geschwister (Formular) steuert, müssen Sie die definieren Validator-Funktion auf einer Ebene höher/höher als die der Geschwistersteuerelemente. Für die Ex:
ngOnInit() {
this.form = this.formbuilder.group({
'startDate' = ['', [<control-specific-validations>]],
'endDate' = ['', [<control-specific-validations>]]
}, { validator: checkIfEndDateAfterStartDate }
});
}
Dann außerhalb der Definition der Komponentenklasse (in der gleichen Datei), definieren die Funktion checkIfEndDateAfterStartDate
auch.
export function checkIfEndDateAfterStartDate (c: AbstractControl) {
//safety check
if (!c.get('startDate').value || !c.get('endDate').value) { return null }
// carry out the actual date checks here for is-endDate-after-startDate
// if valid, return null,
// if invalid, return an error object (any arbitrary name), like, return { invalidEndDate: true }
// make sure it always returns a 'null' for valid or non-relevant cases, and a 'non-null' object for when an error should be raised on the formGroup
}
Diese Validierung wird für diesen FormGroup
durch Addieren der Fehlerzeichen (hier invalidEndDate
) zu true
auf die Fehler-Objekt die FormGroup
ungültig machen. Wenn Sie möchten, dass bestimmte Fehler stattdessen auf einer der gleichgeordneten Steuerelemente gesetzt werden, können Sie die Fehlerflags für diesen formControl
manuell festlegen, indem Sie etwa wie folgt verwenden: c.get('endDate').setErrors({ invalidEndDate: true })
. Wenn Sie dies tun, dann stellen Sie sicher, dass Sie sie für einen gültigen Fall löschen, indem Sie die Fehler auf null
wie folgt setzen, c.get('endDate').setErrors(null)
.
Eine Live-Demo einer ähnlichen Validierung kann here gesehen werden.
Haben Sie versucht, mit [(ngModel)] auf zwei Werte im Formular zuzugreifen und dann zwei Werte zu vergleichen? – Debabrata
@ShinDarth unter meiner Antwort helfen Sie ??? – Robert
@Robert danke für deine Antwort, aber ich habe amal's Lösung verwendet, die einfacher aussieht – ShinDarth