Validation 返回承诺时自定义异步验证不起作用
我调用web api来检查URL别名是否可用,对于这个任务,我在异步验证器中使用了一个httpservice。 问题是,当调用验证器时,会执行所有正确的代码路径(所有Validation 返回承诺时自定义异步验证不起作用,validation,angular,promise,rxjs,formbuilder,Validation,Angular,Promise,Rxjs,Formbuilder,我调用web api来检查URL别名是否可用,对于这个任务,我在异步验证器中使用了一个httpservice。 问题是,当调用验证器时,会执行所有正确的代码路径(所有console.log()按预期运行和行为) 无论验证的承诺返回/解析为null还是{'isurlaisActivityMainAvailable':true},控制器总是显示一个错误对象,如下所示,从而使表单状态保持无效,为什么(该死!) 我使用的是:angular:2.1.0和rxjs:5.0.0-beta.12 这是我的fo
console.log()
按预期运行和行为)
无论验证的承诺返回/解析为null还是{'isurlaisActivityMainAvailable':true}
,控制器总是显示一个错误对象,如下所示,从而使表单状态保持无效,为什么(该死!)
我使用的是:angular:2.1.0和rxjs:5.0.0-beta.12
这是我的formbuilder:
this.formBuilder.group({
//...
"urlAliasActivityMain":[null,[ ValidatorsZr.isUrlAliasActivityMainAvailableAsyncValidator(this.httpActivityService)]],
});
这是我的验证器:
public static isUrlAliasActivityMainAvailableAsyncValidator(httpActivityService: HttpActivityService) {
return function (control: FormControl): Promise<any> | Observable<any> {
const promise = new Promise<any>(
(resolve, reject) => {
httpActivityService.isUrlAliasActivityMainAvailable(control.value)
.subscribe(
(data: any) => {
console.log("isUrlAliasActivityMainAvailableAsyncValidator");
console.log(data);
if (data == false) {
console.log("data == false");
resolve({ 'isUrlAliasActivityMainAvailable': true });
}
else {
console.log("data == true");
resolve(null);
}
},
)
});
return promise;
}
}
公共静态iUrlAliasActivityMainAvailableAsyncValidator(httpActivityService:httpActivityService){
返回函数(控制:FormControl):承诺|可观察{
const promise=新的承诺(
(解决、拒绝)=>{
httpActivityService.isUrlAliasActivityMainAvailable(control.value)
.订阅(
(数据:任何)=>{
log(“isUrlAliasActivityMainAvailableAsyncValidator”);
控制台日志(数据);
如果(数据==false){
log(“数据==false”);
解析({'isUrlAliasActivityMainAvailable':true});
}
否则{
log(“数据==true”);
解析(空);
}
},
)
});
回报承诺;
}
}
您的异步验证器列在阵列中的同步验证器位置,并且被错误地评估
[objectValue、同步验证器、异步验证器]
控件(formState:Object,validator?:ValidatorFn | ValidatorFn[],
asyncValidator?:AsyncValidatorFn | AsyncValidatorFn[]):FormControl
使用给定的formState、验证器和
异步验证程序
formState可以是窗体控件的独立值,也可以是
对象,该对象同时包含值和禁用状态
要更正它,请将验证器移动到适当的阵列位置:
this.formBuilder.group({
//...
"urlAliasActivityMain":[null, null, ValidatorsZr.isUrlAliasActivityMainAvailableAsyncValidator(this.httpActivityService)],
});
天哪,真为我感到羞耻!谢谢你的帮助,你节省了很多时间!因为这件事,我浪费了大约4个小时。这拯救了未来,哈哈,我和它斗争了一天,不知道它是我放置它的位置