2017-10-19 8 views
0

Zu Demonstrationszwecken habe ich diesen simplen Angular App erstellt, die Benutzer eine Liste von Personen machen können: https://plnkr.co/edit/1RFGlXgHLwik02MvbhCz?p=previewWas ist falsch an dieser Winkelform, die dazu führt, dass ausgewählte Werte in der Benutzeroberfläche unerwartet zurückgesetzt werden?

Vorlage:

<form #peopleForm="ngForm"> 
<div *ngFor="let person of people"> 
    Name: <input type="text" name="name" placeholder="Name" [(ngModel)]="person.name"> 
</div> 
</form> 

Komponente:

export class App { 
    people = [ 
    { 
     name: 'Bob', 
    }, 
    { 
     name: 'Alice', 
    } 
    ]; 

    constructor() { } 

    addPerson() { 
    this.people.push({name: ''}); 
    } 
} 

Es hat zwei Bugs :

  • Listenelemente werden in der Benutzeroberfläche zurückgesetzt, wenn „Add Person“ Button geklickt Namen
  • Die letzten Benutzers wird zweimal
gezeigt

ich die zugrunde liegende JSON haben auch auf die Seite gedruckt wird, und es sieht richtig, aber der Rest der UI ist falsch . Kann mir jemand sagen, was ich falsch mache?

Update: Aus irgendeinem Grund funktioniert es wie erwartet, wenn ich das äußere <form> Tag entferne. Wer weiß warum?

Antwort

1

Aktualisieren: ngModel funktioniert nicht, weil Sie keinen eindeutigen Namen für Ihre Eingabe definiert haben. Versuchen Sie diese

<div *ngFor="let person of people; let i=index"> 
    Name: <input type="text" name="name{{i}}" placeholder="Name" [(ngModel)]="person.name" > 
    Gender: 
    <select name="gender{{i}}" [(ngModel)]="person.gender"> 
    <option value=""></option> 
    <option value="m">Male</option> 
    <option value="f">Female</option> 
    </select> 
</div> 

Updated plunker

+0

Das ist Einwegbindung. Ich brauche eine Zwei-Wege-Bindung. Sehen Sie sich die JSON und die Liste der Personen unterhalb des Formulars in Ihrem Beispiel an. Es wird nicht aktualisiert. – Stewart

+0

check my update – JayDeeEss

-1
<select name="gender" [(ngModel)]="person.gender"> 
<option *ngFor="let value of person" [value]="value.gender">{{value.gender}}</option> 

dies versuchen, wird diese machen Drop-down-dynamisch.

+0

Antwortet nicht auf meine Frage, warum es die ausgewählten Werte in der Benutzeroberfläche löscht – Stewart

Verwandte Themen