重新激活形式的自定义验证器未返回true

时间:2019-06-19 17:29:53

标签: angular typescript

我创建了一种用于自定义验证的方法,但无法从该方法返回真实值。 这是我的方法:

requiredFileType(categoryList: CategoryModel[]) {
    return function (control: FormControl) {
      const file = control.value;
      if (file) {
        const extension = file;

        for (let i = 0; i < categoryList.length; i++) {

          for (let j = 0; j < categoryList[i].productModel.length; j++) {
            for (let k = 0; k < categoryList[i].productModel[j].imageProduct.length; k++) {
              console.log(categoryList[i].productModel[j].imageProduct[k].image_path);
              if (categoryList[i].productModel[j].imageProduct[k].image_path.includes(extension)) {
                console.log(categoryList[i].productModel[j].imageProduct[k].image_path);
                return {

                  requiredFileType: null
                };
              }
            }

          }

        }
        return {
          requiredFileType: true
        };
      }

      return {
        requiredFileType: true
      };
    };
  }

我不了解,我没有错误,我的循环工作正常,但是需要返回true方法时返回null;

这是我的FormControl:

 'image': new FormControl(image, this.requiredFileType(this.categoryList)),

2 个答案:

答案 0 :(得分:1)

验证成功后,您应该从ValidatorFn返回null

  

接收控件并同步返回验证错误(如果存在)的函数,否则为 null

代替

return {
  requiredFileType: null
};

return null;

答案 1 :(得分:1)

验证成功后返回对象时,例如:

return {
  requiredFileType: null
};

Angular无法确定您要返回的布尔值。验证通过时,您只需返回null即可:

return null;

仅当验证失败时才需要返回对象,因为您必须指定键,例如:

return{
      requiredFileType: true
    };

然后可以在错误收集中使用requiredFileType键。