Comment faire pour obtenir l'indice de l'élément modifié dans la forme angulaire de la matrice de

Je suis en utilisant Angulaire 4 avec des formes réactives. J'ai un tableau de formulaire que je suis en train de les attacher à un tableau, j'garder une trace de mon composant. Je suis à l'aide de formes réactives afin que je puisse avoir la validation, donc je ne veux pas utiliser le modèle des formulaires approche.

- Je ajouter des articles à la forme de tableau comme suit:

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]
    })
  })
}

Le bon de commande est bien évidemment mes formes réactives FormGroup. la commande est mon objet que je reçois de mon API et je veux mettre à jour ses valeurs, y compris les détails de ligne. Je pense que je devrais utiliser " valueChanges.s'abonner' sur chaque forum, mais je ne suis pas sûr de savoir comment obtenir l'index de l'élément qui a été modifié. Toutes les pensées?

     newGroup.valueChanges.subscribe('i want value and index some how' => {
this.order.ProductbookingDetails[index].ProductName = value.ProductName;
    });

Voici le code HTML de cette partie:

<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>
pourquoi voulez-vous enregistrer chaque détails de ligne? pourquoi ne peux pas vous envoyer le modèle complet
Il y a une tonne de trucs supplémentaires-je recevoir ma commande modèle à partir de l'API, mais je ne veux que les choses dans le bon de commande modèle. Le bon de commande modèle est juste pour que je puisse mettre à jour les informations qui sont autorisés à être mis à jour par l'utilisateur. Donc je ne peux pas envoyer le bon de commande à modèle de l'API lorsque l'on fait des choses parce qu'il va être absent de toutes les autres informations. Je veux que ma commande valeurs du modèle à être mis à jour lorsque les entrées d'un formulaire de changement

OriginalL'auteur Kevin | 2017-07-13