我需要获得可以是任何级别深度的字段的值(不仅仅是子级)。原因是当前函数只检索子控件值 - control.root.get(field).value ,但它可能更深......是否有办法展平控件?
export function ValidatorValueMatchTo(field: string): ValidatorFn {
return (control: AbstractControl): ValidationErrors | null => {
const controlValue = control.value;
if (controlValue) {
const compareValue = control.root.get(field).value;
if (compareValue && controlValue !== compareValue) {
return { mismatch: true };
}
}
return null;
};
}
有点解决方案对我来说。实际上所有比较我的值来自同一组。因此,通过将 root更改为父 - 您可以比较同一表单组中的值:
export function ValidatorValueMatchTo(field: string): ValidatorFn {
return (control: AbstractControl): ValidationErrors | null => {
const controlValue = control.value;
if (controlValue) {
const compareValue = control.parent.get(field).value;
if (compareValue && controlValue !== compareValue) {
return { mismatch: true };
}
}
return null;
};
}
事实证明 get函数接受数组和嵌套对象。所以我不得不在我的初始功能中改变任何东西。但要执行验证器,如下所示: ValidatorValueMatchTo(“my.nested.to.compare.with”)