angular - Angular 7 和 Reactive form Array 正在返回无法找到带有路径的控件的错误
问题描述
我正在从服务器获取数据到组件。
此数据包含称为Family Relation
具有多个值的内容,可以从下拉列表中选择以更改原始家庭关系值。
我想要的是使用 Reactive Forms 创建一个表单控件输入数组,以在角度材料表数据源的每一行显示下拉列表。
这是脚本。familyRelationArray
我用 2 个数组示例(和)替换了服务器数据data
:
getFamilyRelation() 方法获取关系的类型并显示它们。在 stackblitz 中,您可以看到下拉列表菜单位于底部(这在我的计算机上不是问题):
getFamilyRelation() {
//This function gets data from server, but for testing purposes, I filled an array:
this.familyRelationArray = [
{
id: 1,
type: 'Father'
},
{
id: 2,
type: 'Mother'
},
{
id: 3,
type: 'Sister'
}
]
}
getData()
方法是获取原始数据并通过将结果应用到dataSource
具有以下类型的材料表中显示它们dataSource = new MatTableDataSource<any>();
:
getData() {
//For testing purposes, I filled an array of data instead of getting data from servers
this.data = [
{
name: 'xyz', head_hh: 'Yes', fr: 'Parent', frid: 2, ms: 'Married', sts: 'Active', age: '61', iid: 123
},
{
name: 'yxz', head_hh: 'No', fr: 'Child', frid: 3, ms: 'Single', sts: 'Active', age: '25', iid: 221
},
]
this.showEmpty = false;
this.dataSource = new MatTableDataSource((this.data));
this.resultsLength = this.data.length;
this.dataSource.paginator = this.paginator;
this.dataSource.sort = this.sort;
}
这是 FormArray 方法,它在每一行创建下拉列表:
constructor(private fb: FormBuilder) {
this.formGroup = this.fb.group({
test: this.createArray()
})
}
createArray(): FormArray {
return new FormArray(this.dataSource.data.map(item => new FormGroup({
fr: new FormControl(item.frid)
})));
}
html 脚本,包含使用创建的表单数组formArrayName="test"
,创建的下拉列表的索引在formGroupName="i"
哪里:i
<form [formGroup]="formGroup">
<mat-card class="example-card">
<mat-card-content>
<div class="example-container mat-elevation-z8">
<table mat-table [dataSource]="dataSource" matSort formArrayName="test">
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef> Name </th>
<td mat-cell *matCellDef="let element"> <b>{{element.name}}</b> </td>
</ng-container>
<ng-container matColumnDef="head_hh">
<th mat-header-cell *matHeaderCellDef> Head Of HH </th>
<td mat-cell *matCellDef="let element"> {{element.head_hh}} </td>
</ng-container>
<ng-container matColumnDef="fr" >
<th mat-header-cell *matHeaderCellDef> Family Rel. </th>
<td mat-cell *matCellDef="let element; let i = index;">
<div [formGroupName]="i">
<mat-form-field color="warn" appearance="outline">
<mat-label>Drop List</mat-label>
<mat-select id="family_relation" formControlName="fr" placeholder="Drop List">
<mat-option *ngFor="let familyRelation of familyRelationArray;" [value]="frid">
{{familyRelation.type}}
</mat-option>
</mat-select>
</mat-form-field>
</div>
<i>Original Value: {{element.fr}}</i>
</td>
</ng-container>
<ng-container matColumnDef="ms">
<th mat-header-cell *matHeaderCellDef> Marital Sts. </th>
<td mat-cell *matCellDef="let element"> {{element.ms}} </td>
</ng-container>
<ng-container matColumnDef="status">
<th mat-header-cell *matHeaderCellDef> Status </th>
<td mat-cell *matCellDef="let element"> {{element.sts}} </td>
</ng-container>
<ng-container matColumnDef="age">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Age </th>
<td mat-cell *matCellDef="let element"> {{element.age}} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
<mat-paginator [length]="resultsLength" [pageSizeOptions]="[15, 25, 50, 100]"></mat-paginator>
</div>
</mat-card-content>
<mat-card-actions>
</mat-card-actions>
</mat-card>
</form>
错误是我无法将每个下拉列表的值设置为等于每个下拉列表orignal value
下显示的值,并且控制台出现错误:
ERROR 错误:找不到带有路径的控件:'test
我在堆栈上尝试了这篇文章的解决方案,但没有任何效果。
解决方案
推荐阅读
- php - 如何使用固定变量操纵 Prestashop 1.7.x 货币汇率?
- css - 为移动设备调整 Shiny renderImage 的大小
- css - 如何使用reactjs隐藏自动完成中的选定选项
- angular - 嵌套的 Mat-Table 内联编辑 - 数据绑定问题
- javascript - TypeScript 增强窗口在单独的文件中不起作用
- c++ - VS 代码未从 Linux 上的 vcpkg 检测库(opencv)。我怎样才能链接它?
- html - 解决 VS Code 中的 CSS 换行问题
- sql-server - 在源表中添加列时 cdc.ddl_history 表中出现错误
- flutter - 术语“Unblock-File”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称
- java - 通过在java中提供年份来确定下一个夏令时