数组 ngFor 数据丢失/消失
Array ngFor data missing / disappearing
我有以下 angular 6 个组件来添加新用户 html table:
用户-add.component.html
[...]
<tbody>
<tr *ngFor="let value of data.pos; let i = index">
<td><input matInput [(ngModel)]="value.username" name="pos-{{i}}-username"></td>
<td><input matInput [(ngModel)]="value.firstname" name="pos-{{i}}-firstname"></td>
<td><input matInput [(ngModel)]="value.lastname" name="pos-{{i}}-lastname"></td>
</tr>
</tbody>
[...]
用户-add.component.ts
export class UserAddComponent {
data: any = {
pos: [{modell: '', user: '', asset: '', serial: ''}]
};
addPosition(){
this.data.pos.push({modell: 'c', user: '', asset: '', serial: ''});
console.log(this.data);
}
removePosition(pos){
this.data.pos.splice([pos],1);
console.log(this.data);
}
当我单击调用 addPosition()
按钮并填写所有输入字段时,它工作正常。
问题:当我单击删除按钮调用函数 removePosition(1)
以删除第二行时,它会按原样消失。但是,当我再次单击 addPosition
添加新行时,第 0 行的数据从 html table 中消失了。 addPosition
中的 console.log() 仍然输出 pos 0 的正确数据,但在第 0 行的输入字段中不可见。
这是一个跟踪问题。通过遍历对象并对它们的属性使用双向绑定,你会让 Angular 失去理智。
按功能为其提供自定义轨道,或者像这样
<tr *ngFor="let value of data.pos; let i = index; trackBy: value.id">
(ID = 每个对象的唯一标识符)
或者像这样
<tr *ngFor="let value of data.pos; let i = index; trackBy: customTB">
customTB(index, item) {
return `${index}-${item.id}`;
}
(你可以return你想要什么,只要它是独一无二的)
您是在哪种浏览器上进行测试?因为我测试了你的代码并没有意识到你指定的症状。
我有以下 angular 6 个组件来添加新用户 html table:
用户-add.component.html
[...]
<tbody>
<tr *ngFor="let value of data.pos; let i = index">
<td><input matInput [(ngModel)]="value.username" name="pos-{{i}}-username"></td>
<td><input matInput [(ngModel)]="value.firstname" name="pos-{{i}}-firstname"></td>
<td><input matInput [(ngModel)]="value.lastname" name="pos-{{i}}-lastname"></td>
</tr>
</tbody>
[...]
用户-add.component.ts
export class UserAddComponent {
data: any = {
pos: [{modell: '', user: '', asset: '', serial: ''}]
};
addPosition(){
this.data.pos.push({modell: 'c', user: '', asset: '', serial: ''});
console.log(this.data);
}
removePosition(pos){
this.data.pos.splice([pos],1);
console.log(this.data);
}
当我单击调用 addPosition()
按钮并填写所有输入字段时,它工作正常。
问题:当我单击删除按钮调用函数 removePosition(1)
以删除第二行时,它会按原样消失。但是,当我再次单击 addPosition
添加新行时,第 0 行的数据从 html table 中消失了。 addPosition
中的 console.log() 仍然输出 pos 0 的正确数据,但在第 0 行的输入字段中不可见。
这是一个跟踪问题。通过遍历对象并对它们的属性使用双向绑定,你会让 Angular 失去理智。
按功能为其提供自定义轨道,或者像这样
<tr *ngFor="let value of data.pos; let i = index; trackBy: value.id">
(ID = 每个对象的唯一标识符)
或者像这样
<tr *ngFor="let value of data.pos; let i = index; trackBy: customTB">
customTB(index, item) {
return `${index}-${item.id}`;
}
(你可以return你想要什么,只要它是独一无二的)
您是在哪种浏览器上进行测试?因为我测试了你的代码并没有意识到你指定的症状。