Ich arbeite an einem Anmeldeformular. Wenn der Benutzer ungültige Anmeldeinformationen eingibt, möchten wir sowohl das E-Mail- als auch das Kennwortfeld als ungültig markieren und eine Meldung anzeigen, dass die Anmeldung fehlgeschlagen ist. Wie gehe ich vor, um diese Felder nach einem beobachtbaren Rückruf als ungültig festzulegen?
Vorlage:
<form #loginForm="ngForm" (ngSubmit)="login(loginForm)" id="loginForm">
<div class="login-content" fxLayout="column" fxLayoutAlign="start stretch">
<md-input-container>
<input mdInput placeholder="Email" type="email" name="email" required [(ngModel)]="email">
</md-input-container>
<md-input-container>
<input mdInput placeholder="Password" type="password" name="password" required [(ngModel)]="password">
</md-input-container>
<p class='error' *ngIf='loginFailed'>The email address or password is invalid.</p>
<div class="extra-options" fxLayout="row" fxLayoutAlign="space-between center">
<md-checkbox class="remember-me">Remember Me</md-checkbox>
<a class="forgot-password" routerLink='/forgot-password'>Forgot Password?</a>
</div>
<button class="login-button" md-raised-button [disabled]="!loginForm.valid">SIGN IN</button>
<p class="note">Don't have an account?<br/> <a [routerLink]="['/register']">Click here to create one</a></p>
</div>
</form>
Anmeldemethode:
@ViewChild('loginForm') loginForm: HTMLFormElement;
private login(formData: any): void {
this.authService.login(formData).subscribe(res => {
alert(`Congrats, you have logged in. We don't have anywhere to send you right now though, but congrats regardless!`);
}, error => {
this.loginFailed = true; // This displays the error message, I don't really like this, but that's another issue.
this.loginForm.controls.email.invalid = true;
this.loginForm.controls.password.invalid = true;
});
}
Zusätzlich zum Setzen des ungültigen Eingangsflags auf true habe ich versucht, das email.valid
Flag auf false und das loginForm.invalid
auf true zu setzen. Keine dieser Aktionen bewirkt, dass die Eingaben ihren ungültigen Status anzeigen.
setErros
Methode verwenden. Tipps: Sie sollten den erforderlichen Validator zu Ihrer Komponentendatei hinzufügen. Gibt es auch einen bestimmten Grund, ngModel mit reaktiven Formen zu verwenden?