使用Angular 4.0.2,我有一个* ngFor创建输入元素并通过添加按钮更新对象数组,但是我试图找出一旦从该数组中删除一个项目后如何更新对象的indeces .
目前,我的ngFor看起来像:
*ngFor = let name of names; let i = index
然后,我的删除按钮有一个(点击)事件:
(click)="removeRow(i, names)"
方法如下:
removeRow(index:number, names:Names[]){
names.splice(index,1);
index--;
}
但是,当我在删除对象后更新数组中的另一个输入元素时,indeces是不正确的 . 似乎* ngFor中的“let i = index”没有减少,我显然不能只使用:
(click)="removeRow(i, names); i--"
3 回答
您无需手动修改* ngFor设置的索引 . Angular通过其双向数据绑定来处理它 . 修改组件中的“名称”数组时,视图将自动更新以反映更改,这包括* ngFor上的索引 .
点击事件:
组件方法:
请注意,您不需要将数组从视图传递到组件,因为您已在组件中拥有它 .
编辑:Plunker
没有看到更多的代码...这只是猜测 . 但我假设你也有一个组件类的名称属性?
尽量不要将names数组传递给方法,而只是从绑定名称属性中删除元素 . 然后,Angular的数据绑定应该处理其余部分 .
模板:
我有一个图像,因此使用了点击...但它在按钮上的工作方式相同 .
组件类:
此外,我使用{}在模板中显示了"i"的值,删除行后,为新的索引集正确调整了"i"值 .
是不是
i
被值传递到删除行功能?如果是这样,你必须在它存在的相同范围内减少它(在ngFor循环内) .示例:https://snook.ca/archives/javascript/javascript_pass