我正在尝试弄清楚如何以嵌套的角度反应形式获取AbstractControl / FormControl的同级控件。
我的情况是,我正在尝试比较嵌套在FormGroup> FormArray> FormGroup> FormGroup> FormArray> FormGroup
中的2个表单控件的值。我正在使用自定义验证程序来确保在最深层的FormGroup中,一个FormControl值大于另一个FormControl值,但是我无法检索同级FormControl。
我已将另一个控件名称作为字符串传递给自定义验证程序:
static IsGreaterThan(GreaterThanControlName: string) : ValidatorFn | null {
return (control: AbstractControl) : { [key: string]: any } => {
const x = control.parent;
const y = x.get(GreaterThanControlName);
...
}
}
这个想法很简单,我打电话给control.parent来获取父FormGroup,然后使用.get(GreaterThanControlName)来获取我要寻找的FormGroup的控件。
当我仅包括:
const x = control.parent
按预期方式检索并显示一个表单组(当写入控制台时)。
但是,如果我再包括以下内容:
const y = x.get(GreaterThanControlName);
或
const y = x.controls;
我得到了错误:
TypeError: Cannot read property 'get' of undefined
control.parent现在被认为是未定义的,而以前它返回了一个FormGroup,唯一的区别是我试图从原始Control的父FormGroup中检索一个或多个控件。
我可能会使用.root(),但是,要通过多个FormGroups和FormArrays的要求将是解决该问题的麻烦方法。
那么我应该如何在深层嵌套的表单中检索同级FormControl?
任何有关如何解决此问题或改善我对角度的理解的建议都将受到赞赏。
如果需要更多代码来描述这种情况,请随时询问