elementUI变表格双击可编辑

1.第一种方式:循环往表格的数组对象里面添加控制可不可编辑的状态字段

(1)表格的基本架子

      <el-table
          :data="rwsDetails"
          border
          class="table"
          ref="mxMultipleTable"
          header-cell-class-name="table-header"
          @selection-change="mxHandleSelectionChange"
          @row-click="mxHandleRowClick"
          @cell-dblclick="cellEdit">
        <el-table-column prop="grgzrwsId" v-if="false" label="ID" width="55" align="center"></el-table-column>
        <el-table-column  prop="rymc.value" label="被考核人" width="150px" align="center">
        </el-table-column>
        <el-table-column prop="jffz" label="加分值" align="center">
          <template slot-scope="scope">
            <el-input-number v-if="scope.row.jffz.edit" v-model="scope.row.jffz.value" @blur="loseFocus(scope.row.jffz)" ref="jffz"></el-input-number>
            <span v-else>{{scope.row.jffz.value}}</span>
          </template>
        </el-table-column>
        <el-table-column prop="jfyy" label="加分原因" align="center">
          <template slot-scope="scope">
            <el-input v-if="scope.row.jfyy.edit" v-model="scope.row.jfyy.value" @blur="loseFocus(scope.row.jfyy)" ref="jfyy"></el-input>
            <span v-else>{{scope.row.jfyy.value}}</span>
          </template>
        </el-table-column>
      </el-table>

(2)绑定的事件

  // 将所有单元格设置为不可编辑
    initialTableEdit(bo) {
      this.rwsDetails.forEach((item) => {
        for (let i in item) {
          item[i] = {
            value: item[i],
            edit: false
          }
        }
      })
    },
    // 单元格双击事件
    cellEdit(row, column) {
      // 将单元格变为输入框
      row[column.property].edit = true
      // 聚焦到单元格
      setTimeout(() => {
        this.$refs[column.property].focus()
      }, 20)
    },
    // 当输入框失去焦点时不显示输入框
    loseFocus(editCell) {
      editCell.edit = false
    },

2.第二种方式:对于字段少的表格,可以每个设置一个控制状态的字段

(1)表格基本架子:

 <el-table :data="a(item)"
                    border
                    class="tb-edit"
                    @cell-click="cellClick"
                    style="width: 100%;font-size: 24px"
                    :row-style="{height:'50px'}">
            <el-table-column prop="bh"
                             label="编号"
                             align="center"
                             show-overflow-tooltip>
              <template slot-scope="scope">
                <el-input v-model="scope.row.bh"
                          v-if="scope.row.flag"
                          @blur="inputClick(scope.row,'1')"
                          v-focus></el-input>
                <span v-if="!scope.row.flag">{{scope.row.bh}}</span>
              </template>
            </el-table-column>
            <el-table-column prop="yplx"
                             label="值"
                             align="油品类型"
                             show-overflow-tooltip>
              <template slot-scope="scope">
                <el-input v-model="scope.row.yplx"
                          v-if="scope.row.flagone"
                          @blur="inputClick(scope.row)"
                          v-focus></el-input>
                <span v-if="!scope.row.flagone">{{scope.row.yplx}}</span>
              </template>
            </el-table-column>
          </el-table>

(2)初始化

 tableData: [{
        bh: '',
        yplx: '#95',
        flag: false,
        flagone: false
      }, {
        bh: '',
        yplx: '#95',
        flag: false,
        flagone: false
      }],

(3)事件

 // 双击单元格后,显示input,并通过v-focus让input自动获取焦点
    cellClick (row, column) {
      if (column.property == 'bh') {
        row.flag = true
      } else {
        row.flagone = true
      }
    },
    // input框失去焦点事件
    inputClick (row, a) {
      if (a == '1') {
        row.flag = false
      } else {
        row.flagone = false
      }
    }

4.自定义指令获取焦点

directives: {
    // 注册一个局部的自定义指令 v-focus
    focus: {
      // 指令的定义
      inserted: function (el) {
        // 聚焦元素
        el.querySelector('input').focus()
      }
    }
  },

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要实现elementui table双击表数据在线编辑,你可以使用elementui提供的table组件自带的edit配置项。具体实现步骤如下: 1. 在table的el-table-column中设置prop和label属性,prop表示该列对应的数据字段,label表示该列的表头。 2. 在table的el-table-column中设置editable属性为true,表示该列可编辑。 3. 在table的el-table-column中设置edit-setting属性,该属性值为一个对象,包含type、options、min和max等属性,type表示该列编辑的类型,可以是text、textarea、number、select等;options表示下拉菜单的选项,min和max表示数字类型的最小值和最大值。 4. 在table的el-table-column中设置edit-rules属性,该属性值为一个数组,表示该列的校验规则,可以使用elementui提供的一些校验规则或者自定义校验函数。 5. 在table的el-table-column中设置formatter属性,该属性值为一个函数,用于格式化该列的数据显示,这个不是必须的。 6. 在table的el-table-column中设置editable属性为true,表示该列可编辑。当用户双击该列时,该列会自动进入编辑状态,用户可以修改该列的值。用户修改完毕后,可以点击enter键或者点击其他地方使该列退出编辑状态,修改的数据会自动保存到表格中。 7. 在table的el-table-column中设置edit-cancel-text和edit-confirm-text属性,分别表示取消和确认按钮的显示文本。 下面是一个示例代码: ```html <template> <el-table :data="tableData"> <el-table-column prop="name" label="姓名" :editable="true" :edit-setting="{type: 'text'}"></el-table-column> <el-table-column prop="age" label="年龄" :editable="true" :edit-setting="{type: 'number', min: 1, max: 100}" :edit-rules="[{required: true, message: '请输入年龄', trigger: 'blur'}]"></el-table-column> <el-table-column prop="gender" label="性别" :editable="true" :edit-setting="{type: 'select', options: [{value: '男', label: '男'}, {value: '女', label: '女'}]}"></el-table-column> </el-table> </template> ``` 这样就可以实现elementui table双击表数据在线编辑了。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值