【问题标题】:How to set multiple cross fields validators in a fromGroup Angular 4如何在formGroup Angular 4中设置多个交叉字段验证器
【发布时间】:2018-08-01 21:03:11
【问题描述】:

我有一个反应式表单,它具有非常相关的验证。我创建了一个具有跨字段验证的所有功能的类,但是如果我尝试使用 Validators.validator 设置它,它不会触发这些功能。如果我只是使用{validator: MyValidatorClass.myCrossFieldValidator1},这将适用于该功能,但我需要应用更多验证器,并且它不是一个好的解决方案,开始创建子表单组。

我的代码看起来像这个代码,但名称不同

class MyValidatorClass {
  static myCrossFieldValidator1 ...
  static myCrossFieldValidator2 ...
  static myCrossFieldValidator2 ...
}

和形式:

 this.myForm = this.formBuilder.group({
      field1: ['', [Validators.required, Validators.min(0), Validators.maxLength(2)]],  // Done
      field2: ['', [Validators.required, Validators.min(0)]],
      field3: ['', [Validators.required]],
      ...},
     { validator: MyValidatorClass .myCrossFieldValidator1 } // This works but only for one function myCrossFieldValidator1 and is not what I need
     // I have tried with 
     validators & Validators: [MyValidatorClass .myCrossFieldValidator1 
                              ,MyValidatorClass .myCrossFieldValidator12
                              ,MyValidatorClass .myCrossFieldValidator3] 

// 但这不起作用 );

这里的其他解决方案建议声明子组或将函数应用于字段,但我正在寻找将多个自定义跨字段验证器应用于我的组。不知道哪里出了问题,或者是否是技术的限制。 Angular 在其示例中仅展示了一个验证器函数 https://angular.io/guide/form-validation#cross-field-validation

的简单案例

【问题讨论】:

    标签: angular angular-reactive-forms angular-validation angular-validator


    【解决方案1】:

    validator:可以是单个验证器函数,也可以是验证器数组 功能

         this.myForm = this.formBuilder.group({...},
             { validator: [ MyValidatorClass.myCrossFieldValidator1 , 
                            MyValidatorClass.myCrossFieldValidator12 ,
                            MyValidatorClass.myCrossFieldValidator3
                          ] 
    });
    

    FormBuilder#group

    【讨论】:

    • 是的,文档确实如此,但它在现实生活中对我不起作用。我按照问题中的解释进行了尝试,但函数永远不会触发
    • 当您在组中添加验证器时,对组值的工作意味着它本身,您能否分享一些验证器以便我们进行测试
    • 实际上这行得通。谢谢,看来我的错误是我将 s 添加为复数形式,但是一旦删除 s 它就可以将数组作为文档使用,并且您指出了
    【解决方案2】:

    你可以像这样使用Validators.compose

    { validator: Validators.compose([
              MyValidatorClass.myCrossFieldValidator1, 
              MyValidatorClass.myCrossFieldValidator2
    ])} 
    

    【讨论】:

      猜你喜欢
      • 2019-11-23
      • 2022-11-03
      • 1970-01-01
      • 2018-05-01
      • 2018-09-11
      • 2018-06-05
      • 2018-07-10
      • 1970-01-01
      • 2018-06-21
      相关资源
      最近更新 更多