ElementUI + VUE实现表格内编辑

2 篇文章 0 订阅
2 篇文章 0 订阅

实现效果

每行显示修改和删除按钮:
在这里插入图片描述
点击修改后显示保存和取消按钮:
在这里插入图片描述
点击保存或取消将回到上一状态。

原理

  1. 设置被保存标志saveTF=false,记录当前是否有行数据被编辑
  2. 设置中间变量chooseInfo=[ ],记录被编辑的行数据
  3. 设置中间变量chooseNo="",记录被编辑行数据的唯一id
  4. 展示表格时,判断当前行的主键是否等于chooseNo,是则表明当前行正在被编辑,展示input输入框和保存/取消按钮,否则正常展示该行数据和编辑/删除按钮
  5. 点击编辑时,更新①②③的数据为该行数据
  6. 点击保存时,将②的数据根据主键更新,将①置为false,将②③清空,并刷新表格
  7. 点击取消时,将①②③数据重置为初始状态

关键代码

<el-table :data="weekProPlanTable" ref="weekProPlanTable" border :show-summary="true">
	<el-table-column prop="monCount" label="周一" align="center">
	   <template slot-scope="scope">
	        <span v-if="scope.row.id == chooseNo">
	            <el-input-number size="mini" placeholder="请输入数量" :controls="false" 
	            	v-model="chooseInfo.monCount"></el-input-number>
	        </span>
	        <span v-else-if="scope.row.monCount == 0"></span>
	        <span v-else>{{scope.row.monCount}}</span>
	    </template>
	</el-table-column>
	...
	<el-table-column prop="" label="操作" align="center" width="130" fixed="right">
	    <template slot-scope="scope">
	        <div style="display: flex; align-items: center; justify-content: center;">
	            <span v-if="scope.row.id != chooseNo" title="修改" @click="updateClick(scope.row)"
	                class="el-tag el-tag--mini" style="cursor: pointer;">修改</span>
	            <span v-if="scope.row.id != chooseNo" title="删除" @click="deleteClick(scope.row)"
	                class="el-tag el-tag--danger el-tag--mini" style="cursor: pointer;">删除</span>
	            <span v-if="scope.row.id == chooseNo"  title="保存" @click="saveClick(scope.row)"
	                class="el-tag el-tag--success el-tag--mini" style="cursor: pointer;">保存</span>
	            <span v-if="scope.row.id == chooseNo" title="取消" @click="cancelClick(scope.row)"
	                class="el-tag el-tag--info el-tag--mini" style="cursor: pointer;">取消</span>
	        </div>
	    </template>
	</el-table-column>
</el-table>
data() {
    return {
        //周采购计划表格
        weekProPlanTable: [], 
        chooseNo: "", //被选择的mes计划号
        saveTF: true, //是否已被保存
        chooseInfo: {
      		id: "",
        	monCount: 0,
        	//...
        },
    };
},

//更新按钮
updateClick(row){
    if(this.saveTF == true){
        this.$message.info("请修改");
        this.chooseNo = row.mESPlanNo;
        // console.log("row:" + JSON.stringify(row));
        this.saveTF = false;
        this.chooseInfo.monCount = row.monCount;
        //...
        this.chooseInfo.id = row.id;
    }else {
        this.$message.info("请先保存当前编辑项");
    }
},
//保存按钮
saveClick(row){
	this.$message.success(“成功!”);
	//axios保存数据
	//刷新表格
	//。。。
	//解除编辑状态
    this.chooseNo = "";
    this.saveTF = true;
    //将chooseInfo的数据重置
    this.resetChooseInfo();
},
//取消行信息的修改
cancelClick(row){
    this.$message.info("取消修改");
    //解除编辑状态
    this.chooseNo = "";
    this.saveTF = true;
    //将chooseInfo的数据重置
    this.resetChooseInfo();
},

参考链接

这位大神的代码更简洁,但是我的情况更复杂,不太好借鉴:

https://www.jianshu.com/p/33175c3a6ba4

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现编辑动态表格的方法如下: 1. 在 Vue 引入 Element UI 的 Table 组件,并设置 table 的 columns 和 data 属性。 2. 在 columns 设置需要编辑的列的 type 属性为 "input"。 3. 在 data 设置每个单元格的 editable 属性为 true,表示该单元格可以编辑。 4. 绑定 table 的 cell-click 事件,当用户点击单元格时,判断该单元格是否可以编辑,如果可以编辑,则将该单元格的 editable 属性设置为 false,同时保存该单元格。 5. 在单元格失去焦点时,将该单元格的 editable 属性设置为 true,同时将修改后的保存到 data 。 以下是示例代码: ```html <template> <el-table :data="tableData" @cell-click="handleCellClick"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄" :editable="true" :type="'input'"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 18, address: '北京市' }, { name: '李四', age: 20, address: '上海市' }, { name: '王五', age: 22, address: '广州市' } ] } }, methods: { handleCellClick(row, column, cell, event) { if (column.editable) { cell.children[0].setAttribute('contenteditable', true) cell.children[0].focus() cell.children[0].addEventListener('blur', () => { cell.children[0].removeAttribute('contenteditable') row[column.prop] = cell.innerText }) } } } } </script> ``` 在上面的代码,我们使用了 contenteditable 属性来实现单元格的可编辑。在 cell-click 事件,当单元格编辑时,我们将该单元格的 contenteditable 属性设置为 true,并且将焦点设置到该单元格。当单元格失去焦点时,我们将 contenteditable 属性设置为 false,并且将修改后的保存到 data

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值