je veux résoudre ce problème: Angular 5 - formulaire basé sur un modèle
Un champ de saisie a le type email. Exemple:
<input type="email" [(ngModel)]="model.email" #email="ngModel" email />
Je veux valider ce champ. Mais cela ne devrait pas être un champ obligatoire. La validation ne devrait commencer que si elle n'est pas vide. Si le champ est vide, tout va bien. Sinon, un message d'erreur devrait s'afficher jusqu'à ce que l'adresse e-mail soit correcte.
Cela ne fonctionne pas vraiment:
*ngIf="email.untouched && email.invalid"
Alors, comment puis-je valider le champ email? Je manque un statut comme "pas vide".
Un indice?
Vous pouvez simplement passer une condition supplémentaire dans la directive ngIf
pour vérifier si la valeur actuelle de l'entrée est une chaîne vide.
*ngIf="email.value !== '' && email.untouched && email.invalid"
Utilisez l'attribut pattern
avec une expression régulière pour la validation du courrier électronique.
<div class="form-group">
<label for ="email">Email</label>
<input type="text" class="form-control" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,3}$" id="email"name="email" ngModel #emailref="ngModel">
<div *ngIf="emailref.errors &&(emailref.touched || emailref.dirty)" class ="aler alert-danger">
<div [hidden]="!emailref.errors?.pattern">
Invalid pattern
</div>
</div>
</div>
Pour Angular 8 versions il existe un validateur de courrier électronique intégré disponible.
En variable de classe de composant
email= new FormControl('',[
Validators.required,
Validators.email
]);
Dans le composant html
<input type="email" [formControl]="email" class="form-control" id="email" required>
<div *ngIf="email.invalid && (email.dirty || email.touched)"
class="alert alert-danger">
<div *ngIf="email.errors.required">
Email is required.
</div>
<div *ngIf="email.errors.email">
Please enter a valid email.
</div>
</div>
Je l'utilise dans Angular 6+ et cela a fonctionné pour moi.
Utilisez le motif ci-dessous dans un fichier TypeScript.
this.validations_form = this.formBuilder.group({
email: new FormControl('', Validators.compose([
Validators.required,
Validators.pattern('^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$')
]))
});
J'ai essayé dans angular 7
Le code ci-dessous en html fonctionne pour moi
<input type="email" class="form-control center-ele"
[(ngModel)]="recruiter_mail" id="rmail"
name="recriter_mail"
pattern="[email protected]" size="30"
#email="ngModel"
[ngClass]="{ 'is-invalid': f.submitted && email.invalid }"
required email
/>
<div *ngIf="f.submitted && email.invalid" class="invalid-feedback">
<div *ngIf="email.errors.required">Email is required</div>
<div *ngIf="email.errors.email">Email must be a valid email address</div>
</div>
Vikas a donné une excellente réponse! travaillant instantanément dans le programme, mais la console génère des erreurs si vous tapez/manipulez d’autres champs du formulaire (même si ils fonctionnent toujours), je modifie donc #variable emailref en email, comme ceci:
<div class="form-group">
<input type="text" class="form-control" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,3}$"
id="email" name="email" ngModel #email="ngModel" placeholder="Email">
<div *ngIf="email.errors &&(email.touched || email.dirty)" class="aler alert-danger">
<div [hidden]="!email.errors?.pattern">
Invalid pattern
</div>
</div>
</div>
Donc, attribut de champ name="email"
sera identique à la variable de modèle #email
.