当前位置:首页 > 前端 > 正文内容

elemeui表格中点击修改最优雅的方式

Z先生3年前 (2022-03-26)前端825

需求

表格中,某一列需要点击修改。并且能拦截回车事件。

解决方案

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)
      },

关键点

  1. el-table上面加cell-click事件
  2. el-table-column中使用自定义模板,以当前row数据editOrder作为修改入口,判断是否显示input;PS:editOrder是自定义的哦
  3. input失去焦点时,向后台提交数据。

最佳体验

  1. input显示后,如何自动获取焦点?自动获取焦点才能自动失去焦点。
    尝试过很多方式,没办法只能用ref方式,给input通过row主键定义不同的ref,然后就可以去控制自动获取焦点和失去焦点了。
  2. input怎么拦截回车?
    拦截回车@keyup.enter.native,但如果拦截回车到和blur一样的方式,那么数据可能会提交2次,因此回车让input失去焦点,是最佳体验,因此得出:@keyup.enter.native="$event.target.blur()"

总结

通过以上例子,也可以写出点击任意单元格,编辑整行的写法。

分享给朋友:

相关文章

VUE/UNIAPP事件传参

第一种方式使用data<view @click="handleClick" data-info="大家好">点击按钮</v...

antd vue版一些小细节

复选框默认选择复选框选择默认选择,但是不要使用属性手上的checked,否则渲染后无法动态修改,有defaultChecked方法,但是测试无效,所以使用valuePropName: <pre...

vue深度监听

还是不废话,直接上干货 watch: { data: { handler: function(newVal, oldVal) { cons...

【原创】Promise循环执行,以及延时循环

演示代码//核心代码 function promiseMain(page) { return new Promise(function(resolve,&...

问题: - did you register the component correctly......

问题: - did you register the component correctly......

问题:无法使用tree组件提示 Unknown custom element:<a-tree> - did you register the component correctly? Fo...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。
请先 登录 再评论,若不是会员请先 注册