【发布时间】:2018-06-28 01:07:00
【问题描述】:
我正在尝试为地址集合创建一个简单的组件。用户可以添加、删除和编辑所有地址。除了存在多个地址时,这一切都有效,用户只删除第一个地址,然后添加一个新地址。新地址被添加,但现有地址也被清除。在我的应用程序中,我也收到错误 - ExpressionChangedAfterItHasBeenCheckedError。
import { Component, Input } from '@angular/core';
@Component({
selector: 'hello',
template: `<h1>Hello {{name}}!</h1><button type="button" (click)="add()">Add</button>
<form>
<div *ngFor="let addr of data; let i=index;">
<input name="{{'address1'+i}}" type="text" [(ngModel)]="addr.address1" />
<input name="{{'zip'+i}}" type="text" [(ngModel)]="addr.zip" />
<button type="button" (click)="delete(i, addr)">Delete</button>
<hr/>
</div>
</form>
`,
styles: [`h1 { font-family: Lato; }`]
})
export class HelloComponent {
@Input() name: string;
data = [
{
address1:'500 Main St',
address2:'',
city:'Norman',
state:'OK',
zip:'73070'
},
{
address1:'501 Main St',
address2:'',
city:'OKC',
state:'OK',
zip:'73105'
}
];
add() {
this.data.push( { address1:'',
address2:'',
city:'',
state:'',
zip:''});
}
delete(index:number, row:any) {
this.data.splice(index, 1);
}
}
【问题讨论】:
-
您能否更具体地说明重现此错误所需的步骤?我试过添加、编辑和删除项目,这一切似乎都适合我。
-
我让它工作,然后停止工作。我在 getter 上得到了一些帮助,并且能够通过使用 trackBy 功能 ngFor 来修复它。