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)
});
}
有几件事可能与此相关:
- 如果我用 patchValue 更新 myArray 中现有的 FormGroups 之一,它的行为就像正常一样,一切正常。
- 最初我使用与我稍后在推送 myGroup (createGroup()) 时使用的方法相同的方法动态填充 myArray,这也按预期工作。
- 表格是嵌套的。我当前的结构是:myForm -> contains myParentArray -> contains myParentGroup -> contains myArray.
- 我最初在父组件中使用服务创建了整个表单,returns 例如。像 myGroup 这样的 FormGroups。然后我通过 @Input() 将 FormGroups 和 FormArrays 传递给嵌套组件。但我认为这应该没有什么不同。
我已经尝试过使用 .updateValueAndValidity() 更新值,但这不起作用。
也许有什么方法可以强制 FormArrays 根据控件更新它们的值?
正如@Eliseo 指出的那样,我的解决方案只是通过 .getRawValue() 获取值。但主要的错误是,在代码的其他部分,formArray 中的 formControls 被禁用,这导致了最初的问题。
我正在尝试将一个 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)
});
}
有几件事可能与此相关:
- 如果我用 patchValue 更新 myArray 中现有的 FormGroups 之一,它的行为就像正常一样,一切正常。
- 最初我使用与我稍后在推送 myGroup (createGroup()) 时使用的方法相同的方法动态填充 myArray,这也按预期工作。
- 表格是嵌套的。我当前的结构是:myForm -> contains myParentArray -> contains myParentGroup -> contains myArray.
- 我最初在父组件中使用服务创建了整个表单,returns 例如。像 myGroup 这样的 FormGroups。然后我通过 @Input() 将 FormGroups 和 FormArrays 传递给嵌套组件。但我认为这应该没有什么不同。
我已经尝试过使用 .updateValueAndValidity() 更新值,但这不起作用。
也许有什么方法可以强制 FormArrays 根据控件更新它们的值?
正如@Eliseo 指出的那样,我的解决方案只是通过 .getRawValue() 获取值。但主要的错误是,在代码的其他部分,formArray 中的 formControls 被禁用,这导致了最初的问题。