el-table行内编辑

el-table的行内编辑

本周开发遇到了需要能够在element-ui的el-tabe组件中实现行内编辑

啥也不说先放代码

html

<el-table :data="tableData" style="width: 100%" @row-click="handleRowClick">
  <el-table-column prop="date" label="日期"  width="180"> </el-table-column>
  <el-table-column prop="name" label="姓名" width="180">
  	<template slot-scope="scope">
      <el-input
        v-model="scope.row.name"
        v-show="scope.row.seen"
        @focus="handleSetFoucsData(scope.row)"
        @blur="loseFcous(scope.row)"
      ></el-input>
      <div v-show="!scope.row.seen">{{scope.row.name}}</div>
  </el-table-column>
  <el-table-column  prop="address" label="地址"></el-table-column>
</el-table>

js:

import _ from 'lodash'
<script>
  export default {
    data() {
      return {
        tableData: [{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄',
          seen:false
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1517 弄',
          seen:false
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1519 弄',
          seen:false
        }, {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1516 弄',
          seen:false
        }],
        oldRow:{}
      }
    }
		methods:{
      handleRowClick(row){
       for (let item of this.tableData) {
          item.seen = false
        }
        row.seen = true
      },
      handleSetFoucsData(row){
        this.oldRow  = row
      },
      loseFcous(row){
        let res = _.isEqual(row, this.oldRow)
        if(res){
          // 行编辑未修改
        }else{
          // 行编辑发生修改
        }
      }
    }
  }
</script>

如果你仅仅需要行内编辑,那么handleRowClick()就可以了,本质就是使用排它思想,在每次行点击前将所有行对象中的seen属性设置为false,再将当前行的seen设置为 true即可


如果你需要对输入的值,进行判断,当发生了编辑并且值执行对应操作,或者仅仅是编辑但是值未改变,那么你就需要handleSetFocusData()loseFocus()函数。

方法实现本质就是,在输入框显示并且聚焦时,将行的旧数据设置给oldRow,在输入框失去焦点后获取当前行,将this.oldRowrow进行比较,这里使用的时lodash函数库的isEqual()函数(需要npm i lodash官方当文档)进行对比,可以自行添加对应的操作

注意,如果行内的编辑想后端传回的字段如果是null,那么即使你只是聚焦了输入框但是没有发生编辑,但是isEqual()函数还是会返回false,因为你在聚焦输入框后,null就会变成空字符串,所以最好对行内数据对象处理后在赋值给表格,方式意外发生

el-tableElement UI 中的一个表格组件,支持复杂的数据展示和交互。如果你想在多表头的表格中实现行内编辑功能,你可以这样做: 1. **设置表头**: 在`el-table-column`中,为每一列定义一个或多个表头。每个表头可能对应不同的数据区域(即子表头),并且有些表头可以设置为可编辑。 ```html <el-table :data="tableData"> <el-table-column type="index" label="序号"></el-table-column> <!-- 多个表头 --> <el-table-column v-for="(header, index) in headers" :key="index" :label="header.title"> <!-- 编辑列 --> <template slot="cell" slot-scope="scope"> <el-input v-if="header.editable" v-model="scope.row[header.field]"></el-input> <span v-else>{{ scope.row[header.field] }}</span> </template> </el-table-column> </el-table> ``` 2. **配置表头属性**: 对于那些设置为可编辑的表头,你需要提供`editable`属性,并且在数据绑定上使用Vue的`v-model`指令。 3. **保存编辑**: 当用户完成编辑后,可以通过监听单元格内的输入事件或者按钮点击事件,触发数据更新。通常,这涉及到修改`tableData`中的相应行数据。 4. **状态管理**: 可能还需要一个单独的状态管理机制(如Vuex)来跟踪哪些表头处于编辑状态,以及如何处理编辑后的数据变化。 相关问题: 1. 如何在`el-table`中设置表头的可编辑状态? 2. 如何监听行内编辑框的内容改变并保存数据? 3. `el-table`的`edit-method`属性有什么作用?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值