I've written a web api function that takes a username from the textfield and checks if the username is already taken. To know if the username is available or not, my server returns Y if it is available and N if its not.
To validate the username, I'm using a ValidatorFn in Angular2 so validate the input. However, my validator function is not working.
Here is the validator function:
interface Validator<T extends FormControl> { (c: T): { [error: string]: any }; } function validateUsername(c: string) : ValidatorFn { return (this.isAvailable(c)=='Y') ? null : { validateUsername: { valid: false } }; } Here is the isAvailable function:
private isAvailable(username: string) { let usernameAvailable; let url = 'URL/api/auth/checkuser/' + username; let headers = new Headers(); headers.append('User', sessionStorage.getItem('username')); headers.append('Token', sessionStorage.getItem('token')); headers.append('AccessTime', sessionStorage.getItem('AccessTime')); let options = new RequestOptions({ headers: headers }); this.http.get(url, options) .subscribe((res: Response) => usernameAvailable); return usernameAvailable; //returns Y or N } Form Builder:
complexForm: FormGroup; constructor(private http: Http, fb: FormBuilder) { this.complexForm = fb.group({ 'username': [null, Validators.compose([Validators.required, Validators.minLength(5), Validators.maxLength(10), validateUsername(this.complexForm.controls['username'].value)])], }) } validateUsername(this.complexForm.controls['username'].value) is failing and I'm getting this error:
[ts] Type '{ validateUsername: { valid: boolean; }; }' is not assignable to type 'ValidatorFn'. Object literal may only specify known properties, and 'validateUsername' does not exist in type 'ValidatorFn'. (property) validateUsername: { valid: boolean; }