Angular2:如何将validator.required设置为两个字段的通用验证
我使用Angular2 ForumBulder创建表单并添加验证。下面是来自组件的示例代码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], }, {
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对多个验证器进行分组。非常感谢,它解决了这个问题。仍然没有得到想要的结果,我将尝试调试。