Ich brauchte eine Validierung, die prüft, ob email
gleich Email Confirm
ist. Dazu habe ich eine benutzerdefinierte Validierung, die angular4: benutzerdefinierte 'gleich' Validierung mit valueChanges beobachtbar
import { AbstractControl, ValidationErrors, FormGroup } from '@angular/forms';
export function ValidateEqual(equals: string) {
return (control: AbstractControl): ValidationErrors | null => {
const equalsField = control.root.get(equals)
if (equalsField) {
equalsField.valueChanges.subscribe(value => {
console.log('observable fired', value);
// control.updateValueAndValidity({ onlySelf: true , emitEvent: false });
});
if (control.value !== equalsField.value) {
return { equals: true };
}
}
return null;
}
}
und meine Form sieht aus wie
das Feld am Übergang mit Ithis.loginForm = this.fb.group({
password: [ '', [
Validators.required,
] ],
email: [ '', [
Validators.required,
Validators.email,
] ],
emailConfirm: [ '', [
Validators.required,
Validators.email,
ValidateEqual('email'),
] ]
});
So in ValidateEqual()
als Argument Gleichheit zu prüfen, wie
Das folgende Szenario schlägt fehl:
1)
E-Mail: [email protected]
bestätigen E-Mail: [email protected]
* jetzt E-Mail bestätigen zeigt einen Fehler, Es ist nicht gleich "E-Mail". Richtig.
2)
* jetzt ändere ich das email
Feld confirm email
Feld übereinstimmen.
E-Mail: [email protected]
bestätigen E-Mail: [email protected]
* Der Fehler auf dem confirm email
Feld verschwindet nicht, weil es nicht bekannt, dass Veränderung.
Das Problem, das ich habe, ist, dass ich die valueChanges
beobachtbaren auf dem Gleichheits Feld zu verwenden versuchen das control
Feld zu haben, um wieder Validate, aber wenn ich control.updateValueAndValidity()
ermögliche es exponentiell auf jedem Tastendruck wird die Anmeldung und der Browser stürzt ab . Die IT benachrichtigt das Feld email confirm
erneut, damit es fast funktioniert ... fast.
Hat jemand eine Idee, wie man es nur einmal abonnieren und es die control
Feld erneut validieren lassen, ohne erneut zu abonnieren (und wieder ...)?
Karo dieses heraus: https://stackoverflow.com/questions/43487413/password- und-bestätigen-Passwort-Feld-Validierung-angular2-reaktive-Formen – Alex