这个 Angular 表单有什么问题导致它意外地重置了 UI 中的选定值?

What is wrong with this Angular form that makes it reset selected values in the UI unexpectedly?

出于演示目的,我创建了这个简单的 Angular 应用程序,让用户可以列出人员:https://plnkr.co/edit/1RFGlXgHLwik02MvbhCz?p=preview

模板:

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

组件:

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

  constructor() { }

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

它有两个错误:

我也将基础 JSON 打印到页面上,它看起来是正确的,但 UI 的其余部分是错误的。谁能告诉我我做错了什么?

更新:出于某种原因,当我删除外部 <form> 标签时,它按预期工作。有人知道为什么吗?

更新:ngModel 没有工作,因为您没有为您的输入定义唯一名称。试试这个

<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

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

试试这个,这将使下拉菜单动态化。