8000 element-ui实现单元格点击可编辑 · Issue #3 · malaxiannv/blog · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
element-ui实现单元格点击可编辑 #3
Open
@malaxiannv

Description

@malaxiannv

有多种方法实现:
第一种:利用table的cell-dblclick和cell-style
1.template

<el-table
      :data="tableData"
      border
      @cell-dblclick="doubleClickCell"
      highlight-current-row
      :cell-style="defineRow"
      style="width: 100%">
      <el-table-column
        type="index"
        label="序号"
        width="50">
      </el-table-column>
      <el-table-column
        prop="username"
        label="负责人"
        width="180">
        <template v-slot="{ row, column, $index }">
          <el-input
            :ref="$index"
            v-show="editCurrentCell(row, column, $index)"
            v-model="row.username"
            @blur="test"
            placeholder="请输入姓名">
          </el-input>
          <span v-show="!editCurrentCell(row, column, $index)"<
87B5
/span>>{{ row.username }}</span>
        </template>
      </el-table-column>
    </el-table>

2.JS

methods: {
    doubleClickCell (row, column, cell, event) {
      if (column.property !== 'username') { // 判断这几列是否可编辑
        return
      }
      this.clickRowIndex = row.rowIndex
      this.clickColProps = column.property
    },
    getRowKeys (row) {
      return row.username
    },
    defineRow (obj) { //重点是这个函数,给row添加rowIndex属性,以便在doubleClickCell函数中使用
      Object.defineProperty(obj.row, 'rowIndex', {
        value: obj.rowIndex,
        writable: true,
        enumerable: false
      })
    },
    editCurrentCell (row, col, index) {
      if (row.rowIndex === this.clickRowIndex && col.property === this.clickColProps) {
        return true
      }
      return false
    }
}

第二种方法:在tableData中添加选中态编辑

  1. template
<el-table
  :data="tableData"
  border
  highlight-current-row
  style="width: 100%">
  <el-table-column
    type="index"
    label="序号"
    width="50">
  </el-table-column>
  <el-table-column
    prop="username"
    label="负责人"
    width="180">
    <template v-slot="{ row, column, $index }">
      <el-input
        :ref="$index"
        v-show="row[`${column.property}Edit`]"
        v-model="row.username"
        placeholder="请输入姓名">
      </el-input>
      <span
        @dblclick="doubleClickCell($index, column)"
        v-show="!row[`${column.property}Edit`]"
        >
        {{ row.username }}
      </span>
    </template>
  </el-table-column>
</el-table>

2.js

data () {
  return {
    tableData: [{
      username: 'lily',
      usernameEdit: false,//编辑态标识
    }, {
      username: 'tony',
      usernameEdit: false,
    }],
  }
}
methods: {
    doubleClickCell (rowIndex, col) {
      this.$set(this.tableData[rowIndex], `${col.property}Edit`, true)
    },
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    vuevue相关

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0