FormArray 在推送新的 FormGroup 后清除值(但不清除控件)

FormArray clears values (but not controls) after pushing a new FormGroup

我正在尝试将一个 FormGroup (myGroup) 推入一个 FormArray (myArray),它内部已经有一堆 FormGroup。推送 myGroup 后,我记录 myArray.value,然后它只包含 myGroups 值。但是:myArray.controls 仍然包含所有其他 formGroups。

任何人都经历过这种行为或有任何想法,为什么会发生这种情况?已在网上搜索,但找不到任何相关内容。

// at this point the array contains n values and n controls
console.log(this.myArray.value)  

// then I push the new group (result comes from input data of the user)
const myGroup = this.myService.createGroup(result);
(<FormArray>this.myArray).push(<FormGroup>myGroup);

// at this point the array contains only one value, but still n controls
console.log(this.myArray.value);

我的服务:

createGroup(result: Result) {
  return this.fb.group({
    id: this.fb.control(result.id),
    name: this.fb.control(result.name)
  });
}

有几件事可能与此相关:

  1. 如果我用 patchValue 更新 myArray 中现有的 FormGroups 之一,它的行为就像正常一样,一切正常。
  2. 最初我使用与我稍后在推送 myGroup (createGroup()) 时使用的方法相同的方法动态填充 myArray,这也按预期工作。
  3. 表格是嵌套的。我当前的结构是:myForm -> contains myParentArray -> contains myParentGroup -> contains myArray.
  4. 我最初在父组件中使用服务创建了整个表单,returns 例如。像 myGroup 这样的 FormGroups。然后我通过 @Input() 将 FormGroups 和 FormArrays 传递给嵌套组件。但我认为这应该没有什么不同。

我已经尝试过使用 .updateValueAndValidity() 更新值,但这不起作用。

也许有什么方法可以强制 FormArrays 根据控件更新它们的值?

正如@Eliseo 指出的那样,我的解决方案只是通过 .getRawValue() 获取值。但主要的错误是,在代码的其他部分,formArray 中的 formControls 被禁用,这导致了最初的问题。