2017-06-08 8 views
0

Bitte geben Sie die relevanten Plunkerhinzufügen Array zum Anfang Reactive Forms Angular

https://plnkr.co/edit/f0BxpinhuqVz8o6IIFaL?p=preview

// stack overflow makes you put code if a plunker is linked but it is too much code to copy paste here it would just look messy so I a am putting this comment instead. 

sehen Wenn Sie dies ausführen und dann einen neuen Eintrag auf die Schaltfläche Hinzufügen klicken, um das Array hinzugefügt wird, aber Die Formularansicht gibt den Formularstatus nicht wieder, stattdessen wird der erste Eintrag dupliziert und der letzte Eintrag ist nicht mehr vorhanden.

Wenn jemand irgendwelche Ideen oder Anleitungen hat, was ich falsch mache, wäre ich sehr dankbar, da ich ziemlich fest auf einer scheinbar einfachen Aufgabe feststeckt.

Ich habe versucht, dem offiziellen Angular Reactive Forms Guide so nahe wie möglich zu folgen, um dieses Beispiel zu erstellen.

Dank

+3

* "es zu viel Code einfügen kopieren hier" * - dann schneiden bis zu einem [mcve], das ist ein Teil der Arbeit, hier eine Frage zu stellen. – jonrsharpe

+0

Es braucht wirklich so viel Code für ein minimales Beispiel, über das seine Angular hier sprachen haha ​​ –

+0

Hast du die Dokumentation gelesen? Es gibt eine 'insert'-Methode, mit der Sie den' index' angeben können. – developer033

Antwort

4

Scheint wie Angular Probleme Verfolgung der Index Ihrer Objekte in Ihrem formArray hat. Dies kann unter Verwendung von trackBy gelöst werden. Fügen Sie es Ihrer Iteration mit Funktion:

<div *ngFor="let detail of detailArray.controls; let i=index; trackBy:trackByFn" [formGroupName]="i"> 

und in der Komponente:

trackByFn(index: any, item: any) { 
    return index; 
} 

Ihre PLUNKER

+0

Vielen Dank dies das Problem gelöst, wusste ich nicht über den trackby –

+0

Gern geschehen, froh, dass ich helfen konnte! :) Ja, trackBy wird normalerweise (nur) benötigt, wenn es sich um primitive Typen handelt, was aber nicht der Fall ist. Aber anscheinend hat Angular Probleme, die Indexspur zu behalten, wenn Sie den Wert am Anfang des Arrays einfügen, anstatt einfach einen neuen Wert am Ende des Arrays zu setzen (was ohne trackBy funktioniert). Das ist eigentlich ziemlich interessant :) – Alex

Verwandte Themen