angular - 如何检索用户在动态添加行的输入表中输入的数据?
问题描述
我尝试检索用户在动态添加行的输入表中输入的数据。但是我必须在 component.ts 中为每个新行添加一个新数组,以便在表中动态添加以使用双向数据绑定恢复数据。
这是我的 HTML:
<tbody id="tbody">
<tr>
<td></td>
<td *ngFor="let column of table.columns; let index = index; trackBy:trackByIndex;"><input [(ngModel)]="inputValue[index]" type="{{ column.type }}" name="cell" maxLength="{{ column.length }}" required="{{ column.nullable }}" value="{{ column.dataDefault }}"></td>
</tr>
<tr>
<td></td>
<td *ngFor="let column of table.columns; let i = index; trackBy:trackByIndex;"><input [(ngModel)]="inputValue2[i]" type="{{ column.type }}" name="cell" maxLength="{{ column.length }}" required="{{ column.nullable }}" value="{{ column.dataDefault }}"></td>
</tr>
<tr>
<td></td>
<td *ngFor="let column of table.columns"><input type="{{ column.type }}" name="cell" maxLength="{{ column.length }}" required="{{ column.nullable }}" value="{{ column.dataDefault }}"></td>
</tr>
<tr>
<td></td>
<td *ngFor="let column of table.columns"><input type="{{ column.type }}" name="cell" maxLength="{{ column.length }}" required="{{ column.nullable }}" value="{{ column.dataDefault }}"></td>
</tr>
<tr>
<td></td>
<td *ngFor="let column of table.columns" id="myCell"><input id="myInput" type="{{ column.type }}" name="cell" maxLength="{{ column.length }}" required="{{ column.nullable }}" value="{{ column.dataDefault }}"></td>
</tr>
<tr *ngFor="let dynamic of dynamicArray; let i = index;" id="myRow">
<td id="deleteCell" (click)="deleteRow(i)">
<img id="deleteIcon" src="../../assets/img/cancel.png" /><span>suppr</span>
</td>
<td *ngFor="let column of table.columns; let j = index; trackBy:trackByIndex;"><input [(ngModel)]="inputValue3[j]" type="{{ column.type }}" name="cell" maxLength="{{ column.length }}" required="{{ column.nullable }}" value="{{ column.dataDefault }}"></td>
</tr>
<tr>
<td id="addCell" (click)="addRow()">
<img id="addIcon" src="../../assets/img/add.png" /><span>ajouter</span>
</td>
</tr>
</tbody>
这是我的 component.ts :
export class DashboardComponent implements OnInit {
table: Table;
dynamicArray: Array<any> = [];
newDynamic: any = {};
inputValue: string[] = [];
inputValue2: string[] = [];
inputValue3: string[] = [];
}
这是我的结果:
解决方案
我建议重新考虑 DashboardComponent 和模板的结构。您可能需要基于表格中的列在表格上创建标题行,以及可以添加和删除对象的单个行对象数组,以便在 UI 中添加/删除行。关键的一点是,无论您选择如何构建模板和数据,您都需要在每个输入元素上都有一个唯一的名称字段!
有关更多信息,请参阅角度指南/教程:https ://angular.io/start/forms
这是一个非常粗略的示例,希望可以帮助您提供一些想法:
export class DashboardComponent {
table: Table; // assuming there is a name field on each table.column for the sake of the example
rows: Array<any> = [];
addRow() {
const row = {};
table.columns.forEach((column) => row[column.name] = 0);
rows.push(row);
}
}
注意:在每个输入上都有一个唯一的名称字段是关键!这样,每个输入值最终都会被唯一地标识为 angular,并且它可以正确地分配 ngModel。下面的示例只是保证唯一性的一种方法。
<table>
<thead>
<tr>
<th *ngFor="let column of table.columns">{{column.name}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let row of rows; let i = index">
<td *ngFor="let column of table.columns">
<input name="{{column}}_{{i}}
[(ngModel)]="row[column.name]"
/>
</td>
</tr>
<tr>
<td id="addCell" (click)="addRow()">
Add
</td>
</tr>
</tbody>
</table>
推荐阅读
- android - kotlin 多平台项目中的 kotlinOptions
- gatsby - 如何在 Gatsby 上实现 Netlify 表单
- amazon-web-services - 如何从外部网站将项目插入 AWS dynamoDb
- c - 我可以优化返回 12 字节结构的函数的内存使用吗?
- asp.net-mvc - ASP.NET Cored C# 实体 - JSON 导入
- spring-boot - 如何在 Spring Boot 后端将 Auth Code goole 换成 Token?
- c# - 为什么不等待这种方法?
- python - 如何仅删除 csv 的一行并将更改保存在同一个 csv 中?[Python]
- python - 压缩中for循环期间的输入
- ios - UIView 添加为 AVPlayer 中的 Overlay 触摸时不会触发任何操作