angular - 如何使用 Angular8 响应式表单一次添加/编辑一行
问题描述
我正在使用 angular8 反应形式,在此我需要进行内联编辑和添加。应一次添加和编辑一个。现在,我可以一次添加多个记录并添加多个新记录。最初对于现有记录,仅显示编辑按钮,当单击编辑时,它必须替换为保存按钮,并且对于添加新模式,不应显示编辑按钮。我已经尝试了许多步骤,并且还添加了我的工作副本的演示。
HTML:
<tbody formArrayName="opportunitesx">
<tr *ngFor="let item of opportunitiesForm.get('opportunitesx')['controls']; let i = index;"
[formGroupName]="i">
<td> </td>
<td>
{{opportunitiesForm.get('opportunitesx')['controls']['competitorId']}}
<select class="custom-select drop" formControlName="competitorId">
<option selected="" disabled="">Choose Competitor</option>
<option value="1">Lloyd's - TPI - Owners - Alabama</option>
<option value="2">Argenia - Dwelling - Owners - Alabama</option>
<option value="3">Lloyd's - Foremost - Dwelling - Alabama</option>
</select>
</td>
<td>
<input type="text" class="form-control" placeholder="Quote Count"
formControlName="quoteCount" allowNumberOnly maxlength="4">
</td>
<td>
<input type="text" class="form-control" placeholder="Policy Count"
formControlName="policyCount" allowNumberOnly maxlength="4">
</td>
<td>
<input type="text" class="form-control" placeholder="Written Premium"
formControlName="writtenPremium" >
</td>
<td>
<input type="checkbox" style="width: auto;"
formControlName="isTrack">
</td>
<td class="width125">
<button
class="btn btn-outline-primary btn-table" title="Edit" (click)="editOpportunityDetails(i)" [disabled]="valuationModel.isEditValue && valuationModel.isEditValue != i"
>Edit</button>
<button class="btn btn-outline-primary btn-table ml-1" title="Save"
type="button" [disabled]="valuationModel.isEditValue && valuationModel.isEditValue != i" (click)="saveOpportunityDetails(i)">Save</button>
<button class="btn btn-outline-primary btn-table ml-1" title="Delete"
type="button" (click)="deleteOpportunityDetails(i)" [disabled]="valuationModel.isEditValue && valuationModel.isEditValue != i">Delete</button>
</td>
</tr>
</tbody>
TS:
private getOpportunitiesList() {
this.valuationModel.opportunityList = this.userListDetails;
this.opportunitesx.controls = [];
for (let lang of this.valuationModel.opportunityList) {
let group = this.createOpportunityInformation();
group.get('competitorId').setValue(lang.competitorId);
group.get('competitorId').disable();
group.get('quoteCount').setValue(lang.quoteCount);
group.get('quoteCount').disable();
group.get('policyCount').setValue(lang.policyCount);
group.get('policyCount').disable();
group.get('writtenPremium').setValue(lang.writtenPremium);
group.get('writtenPremium').disable();
group.get('isTrack').setValue(lang.isTrack);
group.get('isTrack').disable();
group.get('Id').setValue(lang.Id);
group.get('Id').disable();
this.opportunitesx.push(group);
}
this.preventOpportunityEmpty();
}
public addOpportunityDetails() {
this.opportunitesx.push(this.createOpportunityInformation());
}
public deleteOpportunityDetails(i) {
this.opportunitesx.removeAt(i);
}
public editOpportunityDetails(i, event) {
this.valuationModel.isEdit = false;
this.valuationModel.isEditValue = i;
this.opportunitesx.controls[i].enable();
this.opportunitesx.controls[i]['controls']['competitorId'].disable();
}
解决方案
推荐阅读
- linux - 如何通过 Linux 的 API 在 LTE 调制解调器上设置原始 IP 模式?
- json - Flutter:当列表数据更改时,getx 控制器未更新。我如何确保添加的每个列表,GetX 控制器都知道这一点?
- java - 为什么在 Java 中的 2D / 3D 数组中需要行大小而列大小是可选的?
- java - 有没有办法启动只通过 API 定义一次的 Kafka 侦听器的多个线程?
- visual-studio-2019 - 如何使用 clickonce .net core 3.1 创建多个桌面快捷方式?
- events - 事件和中断之间的区别
- amazon-web-services - 使用脚本为现有 SQS 队列创建警报
- node.js - firebase googleapis 未验证 nodejs 的令牌
- c++ - 运行时检查失败 #2 - 变量“array1”周围的堆栈已损坏
- javascript - 在 JavaScript 函数中添加动态属性