我迷路了,想了解如何处理FormGroup
。
基本上,我建立了一个FormGroup
:
this.formGroup = this.formBuilder.group({
action: this.formBuilder.group({
name: '',
properties: this.formBuilder.array(...)
})
})
properties
FormArray
的每个元素都是使用以下方式创建的:
this.formBuilder.group({
key: ['...', Validators.required],
value: ['...', Validators.required]
})
然后,内部FormGroup
action
作为Input
传递给Component
:
<my-component>
[formGroup]="formGroup.controls.action"
</my-component>
在MyComponent
内部,将action.properties
的{{1}} FormArray
转换为FormControl
的列表,重新使用已经创建的控件。
const defaultFormProperties = {}
const formProperties = this.formGroup.controls.properties as FormArray
formProperties.controls.forEach(control => {
defaultFormProperties[control.value.key] = control.controls.value // I'm reusing the FormControl
})
this.defaultPropertiesGroup = this.formBuilder.group(defaultFormProperties)
但是,当这些重用的FormControl
的值更改时,不会通知初始的FormGroup
。这是预期的行为吗?
我假设FormControl
(一个或多个)在包含在新的FormGroup
中时更改了父对象,对吗?
编辑:我猜对了。做
Object.values(this.defaultPropertiesGroup.controls)
.forEach(control => control.setParent(this.formGroup))
修复了valuesChanges
通知。