elemeui表格中点击修改最优雅的方式
需求
表格中,某一列需要点击修改。并且能拦截回车事件。
解决方案
vue代码
<el-table
ref="menuTable"
……
@cell-click="clickCell"
>
<el-table-column align="center" label="排序" prop="order" width="80">
<template #default="{ row }">
<el-input
v-if="row.editOrder === true"
:ref="'input-order-' + row.menuid"
v-model="row.order"
size="mini"
@blur="changeOrder(row)"
@keyup.enter.native="$event.target.blur()"
/>
<span v-else>{{ row.order }}</span>
</template>
</el-table-column>
</el-table>
JS methods 方法
clickCell(row, col) {
if (col.property === 'order' && !row.editOrder) {
this.$set(row, 'editOrder', true)
}
this.$nextTick().then(() => {
this.$refs['input-order-' + row.menuid].focus()
})
},
changeOrder(row) {
// 修改提交数据
this.$set(row, 'editOrder', false)
},
关键点
el-table
上面加cell-click
事件el-table-column
中使用自定义模板,以当前row
数据editOrder
作为修改入口,判断是否显示input
;PS:editOrder
是自定义的哦input
失去焦点时,向后台提交数据。
最佳体验
input
显示后,如何自动获取焦点?自动获取焦点才能自动失去焦点。
尝试过很多方式,没办法只能用ref
方式,给input
通过row主键
定义不同的ref
,然后就可以去控制自动获取焦点和失去焦点了。input
怎么拦截回车?
拦截回车@keyup.enter.native
,但如果拦截回车到和blur
一样的方式,那么数据可能会提交2次,因此回车让input
失去焦点,是最佳体验,因此得出:@keyup.enter.native="$event.target.blur()"
总结
通过以上例子,也可以写出点击任意单元格,编辑整行的写法。