Я пытаюсь создать элемент управления с асинхронной проверкой, и я не хочу синхронизацию:
Создание формы с помощью formBuilder.
this.myForm = this.fb.group({
someControl: new FormControl(
"",
null,
[this.valueUnique.bind(this)]
)})
Если я сохраню параметр проверки синхронизации как Validators.required, я не получу ошибку.
Ошибка:
Ошибка: ожидаемый валидатор вернет Promise или Observable.
в toObservable (forms.js: 603)
в Array.map ()
в FormControl.asyncValidator (forms.js: 591)
at FormControl.push ../ node_modules/@angular/forms/fesm5/forms.js.AbstractControl._runAsyncValidator
(forms.js: 2535)
at FormControl.push ../ node_modules/@angular/forms/fesm5/forms.js.AbstractControl.updateValueAndValidity
(forms.js: 2508)
at FormControl.push ../ node_modules/@angular/forms/fesm5/forms.js.AbstractControl._updateTreeValidity
(forms.js: 2523)
at forms.js: 2522
at forms.js: 3309
в Array.forEach ()
в FormGroup.push ../ node_modules/@angular/forms/fesm5/forms.js.FormGroup._forEachChild
(forms.js: 3309)
Функция валидатора:
/**
* Validator to checking existance/uniqueness
* of entered value
* @param control
*/
valueIsUnique(control: AbstractControl): Promise<ValidationErrors|null> | null {
if (control && (control.value !== null && control.value !== undefined)) {
return new Promise((resolve, reject) => {
this.service.checkValueExists(control.value).subscribe(res => {
{
if (res && res['data']) {
resolve({
unique: true
});
}
else {
resolve(null);
}
}
},
err=>
{
resolve(null);
});
});
}
}