如何过滤 FormGroup 值?

How to filter FormGroup values?

我有一个巨大的 FormGroup,它有许多 FormControl 和许多嵌套的 FormArray,我需要获取除某些控件之外的顶级 FormGroup 的值。这些控件可能位于嵌套的 FormArrays

的很深处

是否有任何angular方法来过滤form_group.value或form_group.getRawValue()?

看起来没有内置函数,所以我不得不实现一些手动收集值的函数:

getFormValue(form_group: FormGroup): any {
  const value = {};

  Object.keys(form_group.controls).forEach(control_name => {
    if (/* condition that shows that the value should not be filtered out */) {
      value[control_name] = this.getFormItemValue(form_group.controls[control_name]);
    }
  });

  return value;
}

getFormItemValue(item: AbstractControl): any {
  if (item instanceof FormControl) {
    return item.value;
  }
  if (item instanceof FormArray) {
    return item.controls.map(form_group => {
      return this.getFormValue(form_group as FormGroup);
    });
  }
}