I'm trying to make a custom asynchronous validator which checks if the email provided already exists on DB or not. When there's error it works fine, but when the error is solved(valid data is entered) it shows Cannot read property 'emailIsTaken' of null
I'm using Template Driven method. Here's how I use.
<input type="email" name="email" [(ngModel)]='email' #mail='ngModel' required [pattern]='emailPattern' validateEmail>
Using error code
<div *ngIf='mail.errors["emailIsTaken"]'>Email already Registered!</div>
Here's my validator file
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});
}
});
});
}
}
The same error also occurs when I use inbuilt email
validator