Je suis nouveau sur angular 6, je souhaite ici valider un champ de saisie utilisateur et afficher différents messages d'erreur en fonction de l'entrée donnée.
Dans mon projet, j'utilise Angular la conception de matériel pour l'interface utilisateur.
Ce que je veux faire c'est
Maintenant, il passe à la couleur ROUGE lorsque l'entrée ne répond pas à la validation réussie. Cependant, je souhaite afficher un message d'erreur pour chaque validation dans le formulaireContrôle.
Ici, j'ai un mat-input-field.
<form [formGroup]="userAddressValidations" novalidate>
<mat-form-field appearance="outline" class="col-sm-6">
<mat-label>First Name</mat-label>
<input matInput formControlName="firstName">
</mat-form-field>
</form>
<button mat-raised-button class="continueBtnHeight" color="warn">
<span>Save</span>
</button>
Fichier ts
export class ButtonToggleOverviewExample {
userAddressValidations: FormGroup;
constructor(private formBuilder: FormBuilder) { }
ngOnInit() {
this.userAddressValidations = this.formBuilder.group({
firstName: ['', [Validators.required, Validators.minLength(4), Validators.maxLength(20), Validators.pattern('[a-zA-Z]+')]]
});
}
}
stackblitz: https://stackblitz.com/edit/angular-t1k1x6-skowwq?file=app%2Fbutton-toggle-overview-example.ts
quelqu'un peut-il m'aider à résoudre ce problème?.
Essaye ça:
<form class="example-form" [formGroup]="userAddressValidations">
<mat-form-field class="example-full-width">
<input matInput placeholder="First Name" formControlName="firstName">
<mat-error *ngIf="userAddressValidations.get('firstName').hasError('required')">
First Name is Required!
</mat-error>
<mat-error *ngIf="userAddressValidations.get('firstName').hasError('minlength')">
First Name should be atleast 4 characters long!
</mat-error>
<mat-error *ngIf="userAddressValidations.get('firstName').hasError('maxlength')">
First Name can be atmax n characters long!
</mat-error>
<mat-error *ngIf="userAddressValidations.get('firstName').hasError('pattern')">
First Name must follow this pattern!
</mat-error>
</mat-form-field>
</form>
Voici un Sample StackBlitz pour votre réf.
utilisez hasError('invalidName')
si l'utilisateur entre un caractère ou un espace spécial
Composant.html
<form [formGroup]="userAddressValidations">
<label>User Name :
<input type="text" formControlName="firstName">
</label><br>
<div class="errors" *ngIf="userAddressValidations.get('firstName').invalid && (userAddressValidations.get('firstName').touched || userAddressValidations.get('firstName').dirty)">
<div *ngIf="userAddressValidations.get('firstName').hasError('required')">
Please enter your FName
</div>
<div *ngIf="userAddressValidations.get('firstName').errors.minlength">
minimum 4 char required
</div>
<div *ngIf="userAddressValidations.get('firstName').errors.maxlength">
Maximum 20 char only
</div>
<div class="error-text" *ngIf="userAddressValidations.get('firstName').hasError('invalidName')">
Enter only alphabets
</div>
</div>
</form>
Composant.ts
this.userAddressValidations = fb.group({
firstName: ['', [Validators.required, Validators.minLength(4), Validators.maxLength(20), usernameValidator]]
});
nomutilisateur.validators.ts
import { AbstractControl, ValidationErrors } from "@angular/forms"
export const usernameValidator = function (control: AbstractControl): ValidationErrors | null {
let value: string = control.value || '';
if (value) {
const matches = value.match(/^[a-zA-Z]+$/);
return matches ? null : { 'invalidName': true };
} else {
return null;
}
}
Jetez un coup d'œil à ce tutoriel https://codecraft.tv/courses/angular/forms/model-driven-validation , vous pouvez également faire référence à cette question de stackoverflow: Afficher l'erreur de validation personnalisée avec mat-error
Mais voici un petit exemple:
<form [formGroup]="userAddressValidations" novalidate>
<mat-form-field appearance="outline" class="col-sm-6">
<mat-label>First Name</mat-label>
<input matInput formControlName="firstName">
<mat-error *ngIf="email.errors.required">{{getErrorMessage()}}</mat-error>
<mat-error *ngIf="email.errors.minlength">{{getErrorMessage()}}</mat-error>
</mat-form-field>
</form>