我正在使用7号角反应形式。
我需要检查服务器上特定值的存在,以使字段有效/无效。
组件类:
控制:
valueControl = new FormControl("" ,Validators.required,
), [this.valueIsUnique.bind(this)]);
/**
* 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, this.organizationId).subscribe(res => {
{
if (res && res['data']) {
resolve({
unique: true
});
}
else {
resolve(null);
}
}
},
err=>
{
resolve(null);
});
});
}
}
**Service:**
checkValueExists(value:string) {
return this._http.get(`${API}/${value}/exists`, {
headers: ...
}
);
}
现在可以正常工作了。 但是我不想强制执行控制,即Validators.required。因此,作为一种黑客,我添加了Validators.minLength(1)作为同步验证,但这会产生错误:
错误错误:期望的验证程序返回Promise或Observable。 在toObservable(forms.js:603) 在Array.map() 在forms.js:591 在forms.js:611 在Array.map() 在_executeAsyncValidators(forms.js:611) 在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) 在FormControlDirective.push ../ node_modules/@angular/forms/fesm5/forms.js.FormControlDirective.ngOnChanges (forms.js:4463)
是否可以添加异步验证而不必将同步验证添加为第二个参数:
取自this SO ques/ans的参考