我正在尝试使用异步验证创建控件,但我不希望同步验证:
使用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) 在FormControl.push ../ node_modules/@angular/forms/fesm5/forms.js.AbstractControl._runAsyncValidator (forms.js:2535) 在FormControl.push ../ node_modules/@angular/forms/fesm5/forms.js.AbstractControl.updateValueAndValidity (forms.js:2508) 在FormControl.push ../ node_modules/@angular/forms/fesm5/forms.js.AbstractControl._updateTreeValidity (forms.js:2523) 在forms.js:2522 在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);
});
});
}
}
答案 0 :(得分:1)
这个问题有点老了,但也许我的回答可能有用。
我尝试过这种方法,并且有效。
archivos: [null, [] , mimeType],
只有在我将方括号放在同步验证器而不是在异步验证器时才起作用。