type such not formgroup example does control angular validation

such - reactive forms angular 6



¿Por qué mi validador de formGroup no funciona como se esperaba? (3)

Parece que tienes una mezcla extraña de plantilla y forma reactiva. Le sugiero que utilice un formulario reactivo y el email validador incorporado y, al mismo tiempo, elimine cualquier ngModel .

constructor(private fb: FormBuilder) { this.myForm = fb.group({ username: ['''', Validators.required], surname: ['''', Validators.required], message: ['''', Validators.required], email: ['''', Validators.email] }); }

y la plantilla se vería así:

<form [formGroup]="myForm" (ngSubmit)="onSubmit(f.value)" > <input formControlName="username" > <!-- more fields here --> <input formControlName="email" > <span *ngIf="myForm.hasError(''email'', ''email'') && myForm.get(''email'').touched"> Please enter the correct email, this email not valid. </span> </form>

DEMO (solo para mostrar claramente el validador, he quitado el touched )

Estoy intentando realizar validaciones de formularios y encontrar algún problema, si uso un validador de correo electrónico angular como este:

<input type="email" class="mail" email name="emailField" [(ngModel)]="email" #emailField="ngModel">

y ponerlo en forma por formGroup:

<form [formGroup]="myForm" (ngSubmit)="onSubmit(f.value)" >

<input type="email" class="mail" email name="emailField" [(ngModel)]="email" #emailField="ngModel"> <div class="emailinvalid" *ngIf="emailField.invalid && emailField.touched"> <span *ngIf="emailField.hasError(''email'')"> Please enter the correct email, this email not valid. </span> </div> <br> </form>

De esa manera, la validación de correo electrónico no funciona, así que estoy buscando la forma de solucionarlo. Aquí está mi código TS:

export class ContactComponent { myForm: FormGroup; email: string; username: string; surname: string; message: string; constructor(fb: FormBuilder) { this.myForm = fb.group({ ''username'': ['''', Validators.required], ''surname'': ['''', Validators.required], ''message'': ['''', Validators.required], }); } }

username , surname y otras entradas que uso en mi formulario (formGroup) anterior, simplemente lo corté para limpiar el código un poco en el ejemplo.


Puedes tener un archivo validator.ts

const pureEmail = /^(([^<>()/[/]//.,;:/s@"]+(/.[^<>()/[/]//.,;:/s@"]+)*)|(".+"))@((/[[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}])|(([a-zA-Z/-0-9]+/.)+[a-zA-Z]{2,}))$/; export const regexValidators = { phone: ''[/+][0-9() ]{7,}$'', email: pureEmail, };

Y usar en tus componentes como:

this.myForm = fb.group({ ''username'': ['''', Validators.required], ''surname'': ['''', Validators.required], ''message'': ['''', Validators.required], ''email'': ['''', [Validators.required,Validators.pattern(this.validators.email)]] });


Validators.pattern (/^(([^<>()/[/]//.,;:/s@"]+(/.[^<>()/[/]//.,;:/s@"]+)*)|(".+"))@((/[[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}])|(([a-zA-Z/-0-9]+/.)+[a-zA-Z]{2,}))$/)

El patrón anterior funciona bien para mí, ya que Validators.email valida hasta que ingresamos a @ .post que hace que el campo sea válido.