Używam Angular 4 z formami reaktywnymi. Mam tablicę formularzy, którą próbuję powiązać z tablicą śledzoną w moim komponencie. Używam formularzy reaktywnych, więc mogę mieć walidację, więc nie chcę używać metody formularzy szablonów.Jak uzyskać indeks zmienionego elementu w postaci tablicy kątowej
dodać elementy do tablicy postać tak:
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]
})
})
}
Zlecenie Reklamowe jest oczywiście moja reaktywne formy FormGroup. kolejność jest moim obiektem, który otrzymuję z mojego API i chcę zaktualizować jego wartości, w tym szczegóły linii. Myślę, że powinienem używać "valueChanges.subscribe" na każdej nowej grupie, ale nie jestem pewien, jak uzyskać indeks elementu, który został zmieniony. jakieś pomysły?
newGroup.valueChanges.subscribe('i want value and index some how' => {
this.order.ProductbookingDetails[index].ProductName = value.ProductName;
});
Oto HTML dla tej części:
<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>
dlaczego chcesz zapisać poszczególne szczegóły linii? dlaczego nie możesz wysłać całego modelu? – CharanRoot
Jest mnóstwo dodatkowych rzeczy Mam model zamówienia z API, ale chcę tylko niektóre z tych rzeczy w modelu orderForm. Model orderForm jest taki, że mogę aktualizować informacje, które mogą być aktualizowane przez użytkownika. Więc nie mogę po prostu wysłać modelu orderForm do API, gdy wszystko jest zrobione, ponieważ będzie brakowało wszystkich innych informacji. Chcę, aby wartości mojego modelu zamówienia były aktualizowane, gdy zmiany w formularzu zmienią się. – Kevin