Ich benutze Aurelia und Typoskript, um eine Webseite zu erstellen. Ich habe ein einfaches Anmeldeformular und möchte die Benutzer-E-Mail und das Passwort bestätigen.Feldvalidierung onBlur mit Aurelia
Ich benutze Aurelia Validierung und standardmäßig überprüft es den Inhalt meiner Eingabe jedes Mal, wenn es ändert, was lästig sein kann. (Bsp .: eine Fehlermeldung erhalten, dass die E-Mail nicht gültig ist, wenn Sie es noch nicht einmal getan haben). Also möchte ich stattdessen die Validierung onBlur durchführen (wenn der Fokus auf der Eingabe verloren geht) und wenn der Benutzer auf die Login-Schaltfläche klickt.
Hier ist mein Code:
login.html
<template>
<section>
<div class="container col-lg-12">
<div class="col-md-4 col-md-offset-4 centered">
<h2 t="signin_sign_in"></h2>
<form role="form" submit.delegate="login()" validate.bind="validation">
<br if.bind="errors" />
<div if.bind="errors" repeat.for="error of errors" class="alert alert-danger">
<h4 repeat.for="message of error">${message}</h4>
</div>
<div class="form-group">
<label class="control-label" t="signin_email_address"></label>
<input type="text" class="form-control" value.bind="email">
</div>
<div class="form-group">
<label class="control-label" t="signin_password"></label>
<input type="password" class="form-control" value.bind="password">
</div>
<button type="submit" class="btn btn-primary" t="signin_sign_in"></button>
</form>
</div>
</div>
</section>
</template>
login.ts
@autoinject()
export class Login {
email: string;
password: string;
router: Router;
application: ApplicationState;
accountService: AccountService;
errors;
validation;
i18n: I18N;
constructor(router: Router, application: ApplicationState, accountService: AccountService, validation: Validation, i18n: I18N) {
this.router = router;
this.application = application;
this.accountService = accountService;
this.i18n = i18n;
this.errors = [];
this.validation = validation.on(this)
.ensure('email')
.isNotEmpty()
.isEmail()
.ensure('password')
.isNotEmpty()
.hasLengthBetween(8, 100);
}
navigateToHome(): void {
this.router.navigate("/welcome");
}
login(): void {
var __this = this;
this.validation.validate()
.then(() => this.accountService.signin(this.email, this.password, this.rememberMe)
.then(result => {
// Do stuff
})
.catch(error => {
// Handle error
}
}));
}
}
Mein erster Gedanke
& updateTrigger:'blur':'paste'
hinzuzufügen war
zu meiner Bindung im HTML, aber es funktioniert nicht. Die Bindung wird korrekt aktualisiert, wenn der Fokus verloren geht, die Validierung jedoch nicht mehr funktioniert. Es gibt auch keinen Fehler in der Chrome-Debug-Konsole.
Irgendeine Idee, wie man das macht? Ist das überhaupt möglich?