我正在使用反应形式的Angular 4。我有一个表单数组,我试图绑定到我在组件中跟踪的数组。我使用反应性表单,因此我可以进行验证,所以我不想使用模板表单方法。如何获得角度阵列中更改项目的索引
我将项目添加到阵列的形式,像这样:
createFormWithModel() {
this.orderForm = this.fb.group({
orderNumber: [this.order.ProductBookingOrder],
orderDate: [this.order.PurchaseOrderIssuedDate],
lineDetailsArray: this.fb.array([])
})
const arrayControl = <FormArray>this.orderForm.controls['lineDetailsArray'];
this.order.ProductBookingDetails.forEach(item => {
let newGroup = this.fb.group({
ProductName: [item.ProductName],
Quantity: [item.ProductQuantity.Quantity],
UOM: [item.ProductQuantity.UOM],
RequestedShipDate: [item.RequestedShipDate]
})
})
}
的orderForm显然是我的反应形式FormGroup。订单是我从API获取的对象,我想更新其值,包括行详细信息。我想我应该在每个newGroup上使用'valueChanges.subscribe',但我不确定如何获取已更改项目的索引。有什么想法吗?
newGroup.valueChanges.subscribe('i want value and index some how' => {
this.order.ProductbookingDetails[index].ProductName = value.ProductName;
});
下面是这部分的HTML:
<tbody formArrayName="lineDetailsArray">
<tr [formGroupName]="i" *ngFor="let line of orderForm.controls['lineDetailsArray'].controls; index as i">
<td><input class="form-control" type="text" placeholder="Product Name" formControlName="ProductName" required/></td>
<td><input class="form-control" type="number" step=".01" (focus)="$event.target.select()" placeholder="Quantity" formControlName="Quantity"/></td>
<td><input class="form-control" readonly formControlName="UOM"></td>
<td><date-picker formControlName="RequestedShipDate" format="L" [showClearButton]="false"></date-picker></td>
<td><button type="button" (click)="deleteLineDetail(i)">Remove</button></td>
</tr>
</tbody>
为什么要保存每一行的详细信息?为什么你不能发送总模型 – CharanRoot
有很多额外的东西,我从API获得我的订单模型,但我只想要在orderForm模型中的一些东西。 orderForm模型只是为了让我可以更新允许用户更新的信息。所以我不能只在事情完成时将orderForm模型发送给API,因为它会丢失所有其他信息。我希望我的订单模型的值在表单输入更改时更新 – Kevin