Я пытаюсь создать собственный валидатор формы, но получаю эту ошибку. Не удается прочитать свойство 'значение', равное нулю. Я действительно много дней боролся с этой проблемой, и вот моя FormGroup:
this.step1Form = this.fb.group({
username: new FormControl('', {
validators: [Validators.required,
Validators.minLength(4),
this.checkUsername.bind(this)],
}),
email: new FormControl('', {
validators: [Validators.required,
Validators.pattern("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$")],
}),
password: new FormControl('', {
validators: [Validators.required,
Validators.minLength(8)],
}),
repeat: new FormControl('', {
validators: [Validators.required,
Validators.minLength(8)],
}),
});
Вот мой метод checkUsername
checkUsername(g: FormGroup) {
return this.dataService.checkUsername(g.get('username').value).pipe(map(data => {
return typeof data["error"] != 'undefined' ? null : {'taken': true};
}));
}
и вот метод checkUsername в this.dataService
checkUsername(username):Observable<any> {
return this.http.get(globals.baseUrl+'/user/' + username, {headers:this.utilService.getHeadersJson()}).map(this.utilService.map);
}
И я получаю ошибку:
Невозможно прочитать свойство 'value' из null
в этой строке
return this.dataService.checkUsername(g.get('username').value).pipe(map(data => {
Что я делаю не так? Я пробовал без трубы вот так
checkUsername(g: FormGroup) {
return this.dataService.checkUsername(g.get('username').value).subscribe(data => {
return typeof data["error"] != 'undefined' ? null : {'taken': true};
});
}
но это не сработало, я также пробовал свой валидатор на разных позициях, например:
this.step1Form = this.fb.group({
username: new FormControl('', {
validators: [Validators.required,
Validators.minLength(4)],
}),
email: new FormControl('', {
validators: [Validators.required,
Validators.pattern("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$")],
}),
password: new FormControl('', {
validators: [Validators.required,
Validators.minLength(8)],
}),
repeat: new FormControl('', {
validators: [Validators.required,
Validators.minLength(8)],
}),
}, { validator: this.checkUsername.bind(this)});
Также не работает.
ПОЖАЛУЙСТА, ПОМОГИТЕ!
Я также пробовал это:
username: new FormControl('', {
validators: [Validators.required,
Validators.minLength(4)],
asyncValidator: [this.checkUsername.bind(this)],
}),
получил эту ошибку:
Аргумент типа '{validators: ValidatorFn []; asyncValidator: любой [];
} 'нельзя назначить параметру типа' ValidatorFn |
AbstractControlOptions | ValidatorFn []. Объектный литерал может только
указать известные свойства, а asyncValidator не существует в типе
'ValidatorFn | AbstractControlOptions | ValidatorFn [].