gpt4 book ai didi

angular - 如何在不触发表单更改事件的情况下将 FormGroup 添加到 FormArray

转载 作者:行者123 更新时间:2023-12-03 16:50:34 24 4
gpt4 key购买 nike

我用 definitionProperties 中的任何空数组初始化一个表单我该如何更新 FormGroup ?我需要这样做而不触发更改事件,否则会导致 valueChanges 中的无限循环可观察的。

this.gridProcessorForm = this.fb.group({
propertiesSide: new FormControl(),
objectNamesSide: new FormControl(),
definitionProperties: this.fb.array([])
});

这会导致无限循环:
this.gridProcessorForm.valueChanges.subscribe(val => {
let propertyGroups: FormGroup[] = [];
for (let property of this.objectDefinition.properties) {
let group = this.createPropertyFormGroup(property);
(this.gridProcessorForm.get('definitionProperties') as FormArray).push(group); // triggers change event so infinite loop
}
});

当 setValue 与 { emitEvent: false } 一起使用时覆盖 FormArray 会出错。
this.gridProcessorForm.valueChanges.subscribe(val => {
if (this.gridSideSelection = 'top') {
let propertyGroups: FormGroup[] = [];
for (let property of this.objectDefinition.properties) {
let group = this.createPropertyFormGroup(property);
propertyGroups.push(group);
}

(this.gridProcessorForm.get('definitionProperties') as FormArray).setValue(propertyGroups, { emitEvent: false });
}
});

我收到此错误:
There are no form controls registered with this array yet. 

似乎需要表单构建器使用 FormArray 中的组进行初始化?但我想用所有内容初始化表单。

最佳答案

angular 的 repo 中存在问题。请引用此评论 https://github.com/angular/angular/issues/23336#issuecomment-543209703
基本上,你需要这样做:

const addedControl = new FormControl();
this.controlArray.controls.push(addedControl);
this.controlArray['_registerControl'](addedControl);
更新 05.2021
这已在 Angular v12 https://github.com/angular/angular/issues/20439#issuecomment-779988084 中得到修复

关于angular - 如何在不触发表单更改事件的情况下将 FormGroup 添加到 FormArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58481064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com