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

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

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

需求

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

解决方案

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()"

总结

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

分享给朋友:

相关文章

antd vue版一些小细节

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

vue踩坑记20201027

elemeui/antd等框架,再使用复选框、下拉选择框时,如果通过v-model绑定了值,那么选择时,界面不会改变。方法一:使用default-value指定默认值,@change去改变本该v-mo...

UNIAPP内容区域高度定义

代码如下height: calc(100vh - var(--window-top) - var(--window-bottom));CSS变量uni...

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

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

npm锁定依赖包版本

在某些特殊时候,npm需要锁定依赖包的版本,其方法有2种 安装时后面代参数-E修改package.json文件,去掉版本号前面的^ 常用命令: npm install --save-dev...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。