代码之家  ›  专栏  ›  技术社区  ›  Mohamed Sahir

如何在初始页面加载时动态设置表单数组控件的错误

  •  0
  • Mohamed Sahir  · 技术社区  · 4 年前

    在我的一个要求中,我有一个包含行和列的类似数组的网格表。在Init上,我正在进行服务调用,并获取列、值和错误消息。基于此,我为这些列创建了一个表单数组,如果存在错误消息,每个列都有错误消息,需要设置错误。

    我可以为这些列设置值,但在推入表单数组时无法设置错误,我不知道该怎么推送错误。卡在这条线上。

    Q? 关于最初如何根据服务响应错误消息设置表单数组控件中的错误 我可以看到很多关于最初设置值和为该控件设置验证器的演示。

    但在我的例子中,我需要设置错误并设置一个基于服务器响应的值。

    例如)响应是

      [
        {fieldName:'productId',fieldValue:'123',errorMessage:'Product Id should be alphanumeric'},
        {fieldName:'productname',fieldValue:'123',errorMessage:'Product name should be 10 characters'}],
    

    onInit(){
    

    //执行服务调用并获取值,然后将值推送到formArray中。但如何也能推动错误。

    价值运作良好

    let result= service response;
    
         result.forEach((item:any[], index) => {
    
     let formData =this.formBuilder.group({
                item.fieldName:[item.fieldValue],
                item.fieldName:[item.fieldValue]
            
            });
            this.formArr.push(formData);
          
    });
    
    }
    
    0 回复  |  直到 4 年前
        1
  •  1
  •   Akshay Nair    4 年前

    推荐的方法是使用 updateValueAndValidity();

    formData.updateValueAndValidity();
    

    但有一些警告需要理解。

    1. 这些在单个formControl级别上运行良好。

    2. 但在formGroup和formArray级别,它只会更新其祖先的有效性。这些已经在这里详细介绍了 Angular 6, this.formGroup.updateValueAndValidity() not working properly Angular 6,this.formGroup.updateValueAndValidity()工作不正常

    3. 解决方法有点奇怪,但你可以迭代并在这些行上实现这一点。

       Object.keys(this.form.controls).forEach(key => {
            this.form.controls[key].updateValueAndValidity();
          });
      
        2
  •  1
  •   Aakif    4 年前

    在推送到formArr之前,您可以简单地调用formData.setErrors({errorMessage:item.errorMessage})。

    推荐文章