在异步验证器中递归地发出事件错误触发-角指示性形式

问题描述

我有使用反应形式,形式有60个字段。所以我写了asyncvalidtors进行服务器端验证。

注意:不使用值更改机制。它适用于以下两行

   formGroup.ProductId.setErrors(null,{ onlySelf: true,emitEvent: false });
     formGroup.ProductId.updateValueAndValidity({ onlySelf: true,emitEvent:false}); 

验证程序机制问题

在以下情况下,我遇到了一个问题。在异步验证器中,如果productName控件有效并且为productId字段设置error null,则我有用例。我设置了错误,并在执行updateValueandValidity时向服务器发送另一个请求。

if(result.controlName =='ProductName' && result.Validation==true){

// if control Name is productName // set Errors as Null for  Product ID

formGroup.ProductId.setErrors(null,emitEvent: false });
 formGroup.ProductId.updateValueAndValidity({ onlySelf: true,emitEvent: false });
//But it recursively call  while perform this line


}

验证者

 export class SomeAsyncValidator {
       static createValidator = (someService: SomeService) => (control: AbstractControl) =>
           timer(500)
               .pipe(
debounceTime(2000)
                // If prevIoUs query is different from current,distinctUntilChanged(),map(() => control.value),switchMap((name) => someService.exists({ request })),map(() => ({
    
    if(result.controlName =='ProductName' && result.Validation==true){
    
    // if control Name is productName // set Errors as Null for  Product ID
    
    formGroup.ProductId.setErrors(null,emitEvent: false });
    //But it recursively call  while perform this line
    
    
    }
    
    })),catchError(() => of(null)));
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...