返回

轻松掌握el-table单元格内编辑技巧,提升表格交互体验

前端

前言

在日常开发中,我们经常需要在表格中编辑数据。传统的方法是使用表单控件,但是这种方法比较繁琐,而且容易出错。el-table组件提供了一个更简单、更直观的方式来实现单元格内的编辑功能。

原理

el-table组件的单元格内编辑功能是通过v-if指令来控制编辑框和显示值的显示和隐藏。当用户双击单元格时,编辑框会显示出来,用户可以编辑内容。当编辑框失去焦点时,内容会自动保存到数据源中。

实现步骤

1. 安装el-table组件

npm install element-ui

2. 在main.js文件中引入el-table组件

import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)

3. 在vue文件中使用el-table组件

<template>
  <el-table :data="tableData" @cell-dblclick="handleDblclick">
    <el-table-column prop="name" label="姓名"></el-table-column>
    <el-table-column prop="age" label="年龄"></el-table-column>
    <el-table-column prop="address" label="地址"></el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        {
          name: '张三',
          age: 20,
          address: '北京市海淀区'
        },
        {
          name: '李四',
          age: 25,
          address: '上海市浦东区'
        },
        {
          name: '王五',
          age: 30,
          address: '广州市天河区'
        }
      ]
    }
  },
  methods: {
    handleDblclick(row, column, cell) {
      console.log(row, column, cell)
    }
  }
}
</script>

4. 双击单元格出现编辑框

在el-table组件的cell-dblclick事件中,我们可以通过console.log()函数来输出row、column和cell三个参数。row表示当前行的数据,column表示当前列的数据,cell表示当前单元格的元素。

我们可以通过cell.innerHTML来获取当前单元格的内容,然后将内容设置到编辑框中。

<template>
  <el-table :data="tableData" @cell-dblclick="handleDblclick">
    <el-table-column prop="name" label="姓名"></el-table-column>
    <el-table-column prop="age" label="年龄">
      <template slot-scope="scope">
        <div v-if="scope.row.editing">
          <el-input v-model="scope.row.age"></el-input>
        </div>
        <div v-else>{{scope.row.age}}</div>
      </template>
    </el-table-column>
    <el-table-column prop="address" label="地址"></el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        {
          name: '张三',
          age: 20,
          address: '北京市海淀区'
        },
        {
          name: '李四',
          age: 25,
          address: '上海市浦东区'
        },
        {
          name: '王五',
          age: 30,
          address: '广州市天河区'
        }
      ]
    }
  },
  methods: {
    handleDblclick(row, column, cell) {
      row.editing = true
    }
  }
}
</script>

5. 编辑框失去焦点后保存内容

当编辑框失去焦点时,我们可以通过el-input组件的input事件来获取编辑框中的内容,然后将内容保存到数据源中。

<template>
  <el-table :data="tableData" @cell-dblclick="handleDblclick">
    <el-table-column prop="name" label="姓名"></el-table-column>
    <el-table-column prop="age" label="年龄">
      <template slot-scope="scope">
        <div v-if="scope.row.editing">
          <el-input v-model="scope.row.age" @input="handleInput(scope.row)"></el-input>
        </div>
        <div v-else>{{scope.row.age}}</div>
      </template>
    </el-table-column>
    <el-table-column prop="address" label="地址"></el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        {
          name: '张三',
          age: 20,
          address: '北京市海淀区'
        },
        {
          name: '李四',
          age: 25,
          address: '上海市浦东区'
        },
        {
          name: '王五',
          age: 30,
          address: '广州市天河区'
        }
      ]
    }
  },
  methods: {
    handleDblclick(row, column, cell) {
      row.editing = true
    },
    handleInput(row) {
      console.log(row)
    }
  }
}
</script>

结语

el-table组件的单元格内编辑功能非常强大,我们可以通过这个功能轻松实现各种各样的表格交互需求。希望这篇文章能够帮助您快速掌握这一技巧,提升表格交互体验。