angular - 如何从api传递基于json的嵌套formarray动态形式的对象数组
问题描述
嗨,我正在处理具有动态表单数组的表单,我的要求是我有一个名为 specificationDetails 的数组,它有两个表单控制字段,attributeNameId 和 attributeValues。同样attributeValues是一个表单数组,其中formcontrol字段是attributevalueId,compositionValues,对于某些部分最大范围,最小范围会来。现在生成了 ui 部分,并添加了 ts 代码,但问题是由于 ui 是迭代的,一个字段是具有相同 formfield 属性 valueId 的下拉列表,另一个是带有复选框的表,该表在一列和另一列中显示数据是文本字段。当单击复选框时,它必须将 attributeValue id 和 compositionvalues 传递到数组中。现在它只绑定最后一个数据。我们如何解决这个问题。
html
------------------
<ng-container formArrayName="itemSpecDetails">
<div *ngFor="let item of itemForm.get('itemSpecDetails').controls; let mainIndex = index;">
<div [formGroupName]="mainIndex">
<div *ngFor="let details of specificationDetails">
<div formArrayName="attributeValues">
<div *ngFor="let specification of item.get('attributeValues').controls; let innerIndex = index;">
<div [formGroupName]="innerIndex">
<div [ngSwitch]="details.displayTye">
<div nz-col nzSpan="6">
<nz-form-item *ngSwitchCase="'MULTI_SELECT'">
<nz-form-label>{{details.attributeName.name}}
</nz-form-label>
<nz-select nzMode="multiple" nzPlaceHolder="Select Values"
class="dropdown-text"
formControlName="attributeValueId">
<nz-option
*ngFor="let item of details.attributeName.attributeValue"
[nzLabel]="item.name" [nzValue]="item.id">
</nz-option>
</nz-select>
<span
class="tolerance">Tolerance:{{details.toleranceThreshold}}%</span>
</nz-form-item>
</div>
<nz-form-item *ngSwitchCase="'MULTI_SELECT_TEXT_BOX'">
<div>
<nz-form-label>{{details.attributeName.name}}
</nz-form-label>
<span
class="tolerance-table">Tolerance:{{details.toleranceThreshold}}%</span>
</div>
<nz-table #rowSelectionTable
[nzData]="details.attributeName.attributeValue"
[class.overflow]="xOverflow"
[nzScroll]="{x: xscroll, y: yscroll}">
<thead>
<tr>
<!-- <th nzLeft nzWidth="35px" [nzChecked]="checked"
[nzIndeterminate]="indeterminate"
(nzCheckedChange)="onAllChecked($event,details.attributeName.name)"></th> -->
<ng-container *ngFor="let column of headerColumns">
<th class="header-row">{{column}}</th>
</ng-container>
</tr>
</thead>
<tbody>
<tr
*ngFor="let data of rowSelectionTable.data;let i = index;">
<td>
<input nz-input type="checkbox"
(change)="onChange(data.id, $event.target.checked)">
<br>
</td>
<td class="data-value">
{{data.name}}
</td>
<td>
<nz-form-item>
<nz-form-control>
<input type="text"
formControlName="compositionValues"
nz-input
(blur)="onBlur($event.target.value)"
placeholder="Enter compositionValue " />
</nz-form-control>
</nz-form-item>
</td>
</tr>
</tbody>
</nz-table>
</nz-form-item>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</ng-container>
ts
------------
this.itemForm = this.formBuilder.group({
itemSpecDetails: this.formBuilder.array([this.itemSpecDetailsArray()])
})
get itemSpecDetails():FormArray {
// return form.get('itemSpecDetails').controls;
return this.itemForm.get('itemSpecDetails') as FormArray;
}
itemSpecDetailsArray() {
return this.formBuilder.group({
attributenameId: [''],
attributeValues:this.formBuilder.array([this.attributeValues]),
});
}
get attributeValues():FormGroup{
return this.formBuilder.group({
attributeValueId:[null],
compositionValues:[''],
})
onChange(item:any,compositionValue:any,isChecked: boolean) {
console.log(item,compositionValue);
if (isChecked) {
console.log('yes');
}
} [enter image description here][1]
[1]: https://i.stack.imgur.com/Pfbek.png
解决方案
推荐阅读
- java - 查询后不更新 findByID 中的 JPA 值
- c++ - 如何在 C++ 中创建多类型向量
- reactjs - Material UI:自动完成,值设置为字符串,选项设置为对象?
- templates - 博客评论不适用于新模板?
- python - 按某个值对列表或 numpy 数组进行分组
- tensorflow - TypeError:张量是不可散列的。相反,使用 tensor.ref() 作为键。出错
- python - 在 Drake 中,如何将 NumPy 数组转换为不同的标量类型?(例如从 float 到 AutoDiffXd 或 Expression?)
- javascript - Vue.js - 从父组件中清除子表单字段
- sql - 使用 SAS 和 TD SQL 的逗号
- angularjs - 为 AngularJS 动态插入 Google 跟踪代码管理器 (gtag.js) 跟踪 ID