【问题标题】:Angular2: how to apply custom validators in a certain order?Angular2:如何按特定顺序应用自定义验证器?
【发布时间】:2017-06-13 01:42:32
【问题描述】:

我创建了一个带有 2 个自定义验证器的 Angular2 表单,我将它们传递给 FormControl:

this.myForm = fb.group({
    'CF': ['', [Validators.required, customValidator()], asyncCustomValidator()],
});

这是一个 Plunker:https://plnkr.co/edit/pDMKtdC5PqFttfraOPqf(它基于旧的 Angular2 版本)。

我想达到以下行为:

只有当用户通过required 和customValidator 测试时,asyncCustomValidator 才能启动(并调用后端)。

如何获得这种行为?

另外,使用compose方法和将两个或多个验证器放在同一个数组中,有什么区别吗?

【问题讨论】:

    标签: validation angular angular2-forms custom-validators angular2-formbuilder


    【解决方案1】:

    为什么不创建第三个验证器,它只是依次调用您的两个自定义验证器?

    function composedValidator(){
      if(doValidationFirst){
         return doValidationSecond();
      }
      failAndReturn();
    }
    

    编辑:

    这是一篇关于“条件验证”的文章,但 IMO 对于您的情况,我会改用上述方法:

    https://scotch.io/tutorials/how-to-implement-conditional-validation-in-angular-2-model-driven-forms

    这似乎不太适合您...

    【讨论】:

    • “setValidators 和 updateValueAndValidity 是您几乎不应该调用的函数”,正如有人在此处发布的那样:stackoverflow.com/a/41847805/2516399
    • 无论哪种方式我都没有真正的论据,我仍然说我的第一个解决方案简洁、简单(因此可维护)并且完全符合您的要求。
    • 如果验证器与异步验证器结合使用,如何应用您的解决方案?我是否只将异步验证器应用于FormControl?
    猜你喜欢
    • 2017-10-03
    • 2016-12-04
    • 2020-09-09
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多