需求:a-table的插槽里有一列是input输入框,输入内容后一条或者多条都可以保存,在table外有个保存的按钮,点击后保存。
所以输入框输入内容后,在失去焦点的时候获取数据。然后把值保存到数组中,调接口保存数据。
在功能实现后,测试的时候发现,我只保存了一条数据,但是传参却传了两条一样id的,内容不一样的。
这是因为我在失去焦点的事件中,通过push,把内容保存到数组中,每一次失去焦点都会push进一条新数据,也就是说我在输内容的时候
输完先让光标失去焦点,然后删除再输入再失去光标后再输入,如果一直重复这样的操作,同一个id会push每一次我输入的内容,这个bug显然不合理,我只要最新一次输入的值
<a-input
v-model="record.fVcContent"
@focus.native.capture="editDataContent(record)"
@blur.native.capture="inputonBlur"
placeholder="请输入"
/>
saveAllList是保存数据的数组
//失去输入框焦点
inputonBlur(e) {
// console.log(e);
if (!e.target.value.trim()) return // 优化防止没输入内容也调接口
let obj = {
fPkDataId: this.fPkDataId,
fVcContent: e.target.value
}
let i = this.saveAllList.findIndex(item => item.fPkDataId == obj.fPkDataId)
if (i == -1) {
this.saveAllList.push(obj)
} else {
this.saveAllList.splice(i, 1, obj)
}
this.$store.commit('updateData', this.saveAllList)
},
通过findIndex查找索引,如果等于-1代表没有找到,没有找到就直接push到数组里,如果找到了,就用splice替换,splice(从i的位置,删除1项,插入obj对象)