我正在尝试向FormGroup添加自定义验证器,因此我可以比较表单内的多个输入字段。如果我在验证器中硬编码输入字段的名称,它可以工作,但我还没有找到将这些名称作为参数传递的方法。
这可能吗?
//验证器
export function TestValidator (controlName: string, secondControlName: string, thirdControlName: string) {
return (form: FormGroup) => {
// OK
console.log(form);
// OK
console.log(controlName);
// undefined
console.log(secondControlName);
console.log(thirdControlName);
...
}
}
//表单服务
...
this.form = this.formBuilderService.group({...}, {validator: testValidator('name1', 'name2', 'name3')});
我看到的所有将验证器添加到fromGroup的示例都不使用参数。
答案 0 :(得分:0)
我的自定义验证码可能有助于解决您的问题
export function matchOtherValidator(otherControlName: string) {
let thisControl: FormControl;
let otherControl: FormControl;
return function matchOtherValidate(control: FormControl) {
if (!control.parent) {
return null;
}
// Initializing the validator.
if (!thisControl) {
thisControl = control;
otherControl = control.parent.get(otherControlName) as FormControl;
if (!otherControl) {
throw new Error('matchOtherValidator(): other control is not
found in parent group');
}
otherControl.valueChanges.subscribe(() => {
thisControl.updateValueAndValidity();
});
}
if (!otherControl) {
return null;
}
if (otherControl.value > thisControl.value) {
return {
dateError: true
};
}
return null;
}
在这里你可以看到我如何通过传递另一个控件名来获得其他控件 检查哪一个更大,您可以在验证中使用相同的技术 功能