Angular2:如何将validator.required设置为两个字段的通用验证

Angular2:如何将validator.required设置为两个字段的通用验证,angular,angular2-formbuilder,Angular,Angular2 Formbuilder,我使用Angular2 ForumBulder创建表单并添加验证。下面是来自组件的示例代码 this.OtpForm = this._fb.group({ otpInput: this._fb.group({ otpInput1: ['', Validators.required], otpInput2: ['', Validators.required], otpInput3: ['', Validators.required], }, {

我使用Angular2 ForumBulder创建表单并添加验证。下面是来自组件的示例代码

this.OtpForm = this._fb.group({
    otpInput: this._fb.group({
      otpInput1: ['', Validators.required],
      otpInput2: ['', Validators.required],
      otpInput3: ['', Validators.required],
    }, { validator: this.numericValidator })
});

现在这个很好用。但问题是如何
验证器。必需的
对于所有字段来说都是通用的,就像自定义验证器
数字验证器

例如,您可以为otpInput组创建一个以上的自定义验证器

validateAllRequired(g: FormGroup) {
    let ctrls = g.controls;
    let keys = Object.keys(ctrls);
    let valid = true;
    keys.forEach((key) => {
      let ctrl = ctrls[key];
      if (ctrl.value.trim() == '') {
        valid = false;
      }
    });
    return valid ? null : {
      validateAllRequired: {
        valid: valid
      }
    };
}
此外:

otpInput: this._fb.group({
  otpInput1: [''],
  otpInput2: [''],
  otpInput3: [''],
}, { validator: Validators.compose([this.numericValidator, this.validateAllRequired]) })
使用validators.compose()组合验证器

对于异步验证程序,请使用

Validators.composeAsync([...])

例如,您可以为otpInput组再创建一个自定义验证器

validateAllRequired(g: FormGroup) {
    let ctrls = g.controls;
    let keys = Object.keys(ctrls);
    let valid = true;
    keys.forEach((key) => {
      let ctrl = ctrls[key];
      if (ctrl.value.trim() == '') {
        valid = false;
      }
    });
    return valid ? null : {
      validateAllRequired: {
        valid: valid
      }
    };
}
此外:

otpInput: this._fb.group({
  otpInput1: [''],
  otpInput2: [''],
  otpInput3: [''],
}, { validator: Validators.compose([this.numericValidator, this.validateAllRequired]) })
使用validators.compose()组合验证器

对于异步验证器使用

Validators.composeAsync([...])

谢谢你的回答。我认为
validateAllRequired
需要被称为
this.validateAllRequired
。正确??如果您在当前类中定义了所需的
validateAllRequired
,则需要使用
,否则您可以在其他地方定义以重复使用此函数,您不需要
,建议将自定义验证放在其他文件中,所以你可以导入这个函数来使用它,因为这个组件是公共的,所以我想把这个函数保留在当前的类中。现在我有另一个问题,当我附加两个自定义验证器(如
{validator:[this.numericvalidater,this.validateAllRequired]}
)时,我得到一个错误:
this.validator不是一个函数
。关于这个错误有什么建议吗?请查看我的更新帖子,使用Validators.compose对多个验证器进行分组。非常感谢,它解决了这个问题。仍然没有得到想要的结果,我将尝试调试。谢谢你的回答。我认为
validateAllRequired
需要被称为
this.validateAllRequired
。正确??如果您在当前类中定义了所需的
validateAllRequired
,则需要使用
,否则您可以在其他地方定义以重复使用此函数,您不需要
,建议将自定义验证放在其他文件中,所以你可以导入这个函数来使用它,因为这个组件是公共的,所以我想把这个函数保留在当前的类中。现在我有另一个问题,当我附加两个自定义验证器(如
{validator:[this.numericvalidater,this.validateAllRequired]}
)时,我得到一个错误:
this.validator不是一个函数
。关于这个错误有什么建议吗?请查看我的更新帖子,使用Validators.compose对多个验证器进行分组。非常感谢,它解决了这个问题。仍然没有得到想要的结果,我将尝试调试。