angular - 将反应式表单组传递给组件会将值绑定回父级
问题描述
这已成为非常恼人的行为。我有一个如下所示的 JSON 对象:
"formElementRegistry": [
{
"formElement": {
"id": 53,
"name": "Multiple Choice",
"componentName": "multiple-choice",
"icon": "format_list_bulleted"
},
"formElementConfiguration": {
"required": true,
"id": 95,
"label": "My multi choice",
"formChoiceOption": [
{
"id": 43,
"name": "M"
},
{
"id": 44,
"name": "C"
}
]
},
"position": 0
}
]
在列表组件中,我循环formElementRegistry
显示单个 div,如下所示:
<div *ngIf="this.form?.get('formElementRegistry')">
<div cdkDrag *ngFor="let formRegistryElement of this.getFormElementRegistry()?.controls; let i = index;">
<app-selected-form-element
[ngClass]="'selected-form-element'"
[formRegistryElement]="formRegistryElement"
[formRegistryElementIndex]="i"
></app-selected-form-element>
</div>
</div>
</div>
模板app-selected-from-element
如下:
<div *ngIf="formRegistryElement?.get('formElementConfiguration')">
<mat-icon> {{formRegistryElement?.get('formElement')?.get('icon')?.value}} </mat-icon>
<p> {{formRegistryElement?.get('formElementConfiguration')?.get('label')?.value}} </p>
<span [ngClass]="'action-icons'">
<mat-icon
matTooltip="Edit {{formRegistryElement?.get('formElement')?.get('name')?.value}} settings"
[ngClass]="'clickable'"
(click)="this.formBuilderService.editFormElementConfigurationIndex.next(formRegistryElementIndex); this.formBuilderService.editFormElementConfiguration.next(formRegistryElement?.get('formElementConfiguration'))"
>edit</mat-icon>
<mat-icon
matTooltip="Remove {{formRegistryElement?.get('formElement')?.get('name')?.value}}"
[ngClass]="'clickable'"
(click)="this.formBuilderService.deletedFormElement.next(this.formRegistryElementIndex);this.snackBar.open(formRegistryElement?.get('formElement')?.get('name')?.value + ' removed!', 'Success');">delete_forever</mat-icon>
</span>
</div>
this.formBuilderService.editFormElementConfiguration
是一个ReplaySubject
-public editFormElementConfiguration = new ReplaySubject<AbstractControl | null | undefined>();
该app-form-element-configuration
组件在 onInit 中有一个侦听器,用于检索 formElementConfiguration 的表单组,该表单组在按下编辑按钮时发出app-selected-from-element
(如上所示)
太好了,配置组件在单击编辑时以正确的数据启动
问题是在配置组件中所做的任何表单数据更改都会绑定回父组件,而无需为此编写任何代码
为什么会这样?似乎将 FormGroup 传递给组件会自动将对其所做的任何更改绑定回父组件
我会更好地传递并formRegistryElement?.get('formElementConfiguration')?.value
从中app-form-element-configuration
创建一个新的 FormGroup 还是有办法将 FormGroups 传递给组件而无需将任何数据绑定回父级?
解决方案
推荐阅读
- c - 目标通过标准输入传递的 CreateProcessW - 找不到目标
- c# - 使用 shift 键从 xy 更改为 xz 尺寸进行拖动 - 输入延迟问题
- django - 当您使用 form.is_valid 和 form.cleaned_data 时,django 清理和验证是什么?
- c++ - typeid() 或 dynamic_cast() 如何导致程序崩溃(使用 FLANN 库)?
- python - Python捕获终端输出
- wpf - WPF - 自动和按比例调整行大小的组合
- r - 在 R 中围绕特定目标日期的大型数据集中计算 30 天平均值
- c++ - 我不知道为什么我的 add 方法不起作用
- javascript - 表示已连接但未运行 onaddstream 函数的 iceConnectionState
- java - 一旦 Canvas 变得太大,如何捕获这个 JavaFX NullPointerException?