【发布时间】:2021-07-31 16:56:17
【问题描述】:
我在尝试实现异步验证器时遇到问题。这是我的尝试:
export class EmailValidator {
static createValidator(): AsyncValidatorFn {
return (control: AbstractControl): Observable<ValidationErrors | null> => {
return of({}).pipe(
delay(1000),
tap(() => {
const isMatch = /[A-Za-z0-9]{6,}@gmail.com/.test(control.value);
return isMatch ? null : { invalidEmail: true }
})
)
};
}
}
这是表单的基本创建:
this.loginForm = this.fb.group({
email: [
'',
[
Validators.required,
],
EmailValidator.createValidator()
],
password: [
'',
[
Validators.required,
Validators.minLength(8)
]
]
});
这是我的html:
<div class="container">
<ul>
<li class="active"><a routerLink="/login">Login</a></li>
<li><a routerLink="/auth/register">Register</a></li>
</ul>
<form [formGroup]="loginForm" (ngSubmit)="onSubmit()">
<input formControlName="email" type="email" placeholder="email">
<div *ngIf="(loginForm.get('email')?.touched || loginForm.get('email')?.dirty) && loginForm.get('email')?.errors?.required">
Email is required!
</div>
<div *ngIf="loginForm.get('email')?.errors?.invalidEmail">
Email is invalid!
</div>
<input formControlName="password" type="password" placeholder="password">
<input type="submit" value="Login">
</form>
</div>
当我尝试在验证器内部调试时,如果匹配则返回 null,如果不匹配则返回错误对象。由于某种原因,错误 div 未呈现。
【问题讨论】:
-
您已将
emailAsyncValidatorDirective添加到您的模板中,但缺少实现代码。您能否在最初的问题中也提供这一点。 -
我第一次尝试用指令来做,但也失败了:D,现在我将其删除,谢谢指出。
标签: angular validation