【发布时间】:2017-09-12 13:16:37
【问题描述】:
我有一个 Angular 组件,它有一个按钮,可以将新对象添加到用作模型的数组中。在我的组件模板中,我有一个 *ngFor 循环,它遍历数组中的对象并显示对象属性的输入字段。每个对象旁边还有一个“删除”按钮,用于从数组中删除对象。当我执行以下步骤时,UI 与模型不同步并清空除第一个项目之外的所有项目的字段。
- 通过单击“添加”按钮将 3 个新对象添加到数组中
- 用一些数据填充输入字段
- 单击中间项目上的删除按钮将其删除
- 点击“添加”按钮添加 1 个新对象
是什么导致 UI 与模型不同步?
这是一个演示问题的 Plunker 示例Example 我还在模板中添加了一行显示模型数组中的内容。
@Component({
selector: 'my-app',
template: `
<div>
<button (click)="things.push({})">+ Add new thing</button>
<br />
<br />
<form #contactForm="ngForm">
<ng-container *ngFor="let thing of things;let i = index">
<input [(ngModel)]="thing.name" name="name-{{i}}" id="name-{{i}}" placeholder="name"/>
<br />
<input [(ngModel)]="thing.otherstuff" name="other-{{i}}" id="other-{{i}}" placeholder="other" />
<button (click)="things.splice(i, 1)">Remove</button>
<br />
<br />
</ng-container>
</form>
{{things | json}}
</div>
`,
})
export class App {
things: Awesome[]
constructor(){
this.things = new Array();
}
}
@NgModule({
imports: [
BrowserModule,
FormsModule
],
declarations: [ App ],
bootstrap: [ App ]
})
export class AppModule {
}
export class Awesome{
name?: string;
otherstuff?: string;
}
【问题讨论】:
-
如果有 3 个对象,当你用一些随机字符串填充它们的输入字段时,删除中间的一个,然后再次单击添加按钮它会清除所有内容
-
这是个好问题:)。要解决此问题,只需将您的表单放入 *ngFor
标签: angular