【发布时间】:2017-12-18 15:00:40
【问题描述】:
我正在使用带有反应形式的 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>
【问题讨论】:
-
为什么要保存每一行的详细信息?为什么你不能发送总模型
-
我从 API 中获得了我的订单模型有很多额外的东西,但我只想要 orderForm 模型中的一些东西。 orderForm 模型只是为了让我可以更新允许用户更新的信息。所以我不能在事情完成后将 orderForm 模型发送到 API,因为它会丢失所有其他信息。我希望在表单输入更改时更新订单模型的值
标签: angular angular-reactive-forms formarray