【发布时间】:2018-09-02 00:16:02
【问题描述】:
我正在尝试制作一个自定义异步验证器,用于检查所提供的电子邮件是否已存在于数据库中。当出现错误时它可以正常工作,但是当错误解决时(输入有效数据)它显示Cannot read property 'emailIsTaken' of null
我正在使用模板驱动方法。这是我的使用方法。
<input type="email" name="email" [(ngModel)]='email' #mail='ngModel' required [pattern]='emailPattern' validateEmail>
使用错误代码
<div *ngIf='mail.errors["emailIsTaken"]'>Email already Registered!</div>
这是我的验证器文件
import { Validator, AbstractControl, NG_ASYNC_VALIDATORS } from '@angular/forms';
import { Directive, Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
@Directive({
selector: '[validateEmail]',
providers: [{
provide: NG_ASYNC_VALIDATORS,
useExisting: EmailValidator,
multi: true
}]
})
@Injectable()
export class EmailValidator implements Validator {
constructor(private http: HttpClient){}
validate(control: AbstractControl): Promise<any> | Observable<any> {
return new Promise(resolve => {
this.http.get('http://surjit.com/email.php?q=' + control.value).subscribe((success)=>{
if(success === true){
resolve(null);
}
else{
resolve({'emailIsTaken': true});
}
});
});
}
}
当我使用内置的email验证器时也会出现同样的错误
【问题讨论】:
-
你真的不应该发布错误文本的截图,将文本复制/粘贴到你的问题中更容易更好。也就是说,向我们展示错误源自的
SignupComponent.html的代码。
标签: angular