Comment puis-je configurer manuellement une forme Angulaire champ comme invalide?
Je travaille sur un formulaire de connexion et si l'utilisateur entre des informations d'identification non valides, nous voulons marquer à la fois l'e-mail et le mot de passe champs comme invalide et afficher un message indiquant que la connexion a échoué. Comment dois-je aller sur la configuration de ces champs invalide à partir d'une observable de rappel?
Modèle:
<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>
Méthode de connexion:
@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;
});
}
Outre la configuration des entrées invalides drapeau vrai que j'ai essayé de réglage de la email.valid
drapeau à faux, et le réglage de la loginForm.invalid
de vrai. Aucun de ces causer des entrées à afficher leur état non valide.
- Est votre backend sur un autre port que le port angulaire? Si donc cela pourrait être une question de la SCRO. Quel cadre utilisez-vous pour le backend.
- Vous pouvez utiliser
setErros
méthode. Conseils: Vous devez ajouter l'validateur sur votre fichier de composant. Aussi est-il une raison particulière d'utiliser ngModel avec des formes réactives?
Vous devez vous connecter pour publier un commentaire.
en composant:
et en html:
setErrors({'incorrect': false})
ousetErrrors({})
ne sont pas de travail pour moisetErrrors(null)
formData.form.controls['email'].markAsTouched();
comme @M. Farahmand mentionnés ci-dessous. À l'aide desetErrors({'incorrect': true})
juste misng-invalid
classe css pour l'entrée. J'espère que cela aide quelqu'un.formData.form.setErrors({'incorrect': true});
control.updateValueAndValidity()
par la suite, comme je l'ai fait. Elle va effacer l'erreur.setErrors(null)
n'est pas autorisé lors de l'utilisation de la Machine avec la plus stricte null contrôles.L'ajout de Julia Passynkova la réponse de
Pour définir erreur de validation d'un composant:
Pour désactiver la validation d'erreur dans le composant:
Être prudent avec les désarmer les erreurs à l'aide de 'null', comme cela va écraser toutes les erreurs. Si vous voulez garder certains autour de vous pourriez avoir à vérifier l'existence d'autres erreurs première:
setErrros(null)
ne fonctionne pas pour moiJ'ai essayé d'appeler
setErrors()
à l'intérieur d'un ngModelChange gestionnaire dans un modèle de formulaire. Cela n'a pas fonctionné jusqu'à ce que j'attendais une tique avecsetTimeout()
:modèle:
composant:
Pièges de ce genre sont de me faire préférer formes réactives.
Cannot find name 'NgModel'.
erreur pour la ligne@ViewChild('pwConfirmModel') pwConfirmModel: NgModel;
un correctif pour ce problèmeDans la nouvelle version de matériel 2 contrôle le nom commence par mat préfixe setErrors() ne fonctionne pas, au lieu Juila la réponse peut être changé:
Voici un exemple qui fonctionne:
Bien que sa fin mais la solution suivante travaillé formulaire de moi.
Dans ma forme Réactive, j'avais besoin de marquer un champ comme non valide si un autre champ a été vérifiée. En ng version 7 je n'ai suivantes:
Donc au-dessus, quand j'ai cocher la case il définit la liste déroulante, comme l'exige et le marque comme sale. Si vous ne marquez pas en tant que tel, alors il ne sera pas valide (dans l'erreur) jusqu'à ce que vous essayez d'envoyer le formulaire ou d'interagir avec lui.
Si la case est définie sur false (désactivé), puis nous avons clairement la nécessaire du programme de validation sur la liste déroulante et de le remettre à un état primitif.
Aussi - n'oubliez pas de vous désinscrire de la surveillance des modifications de champ!
De l'unité de test: