首页IT科技elementui 行内编辑(element-ui表格编辑)

elementui 行内编辑(element-ui表格编辑)

时间2025-05-03 00:45:13分类IT科技浏览3547
导读:前言: 准备: element-ui vue3 vscode...

前言:

准备:

element-ui vue3 vscode

实现步骤:

数据标定 打开激活 编辑保存

1. 设定需要编辑的表格单元格是否编辑标识

在请求后台表格数据时进行一个二次包装         ,如果后端已经处理则不需要在进行包装(此处包装是否编辑的标识为了区分显示编辑框和纯内容显示)

以上述图片效果为例                  ,需要对三个字段进行标识            。

标识数据JS代码:

// 设备分组列表 getList() { queryList().then((res) => { // 获取数据后通过foreach循环对数据对象进行标识 res.data.List.forEach(item => { item.xEdit = false; item.yEdit = false; item.zEdit = false; this.list.cameras.push(item) }); }); },

HTML代码:一下代码实现了在未编辑状态下的显示效果

<!-- 添加的标识为了进行控制表格行中的需要编辑的单元格中的span标签和el-input标签的显示与隐藏 --> <el-table :data="list" stripe style="width: 100%"> <el-table-column prop="cameraX" label="坐标位置:X"> <template slot-scope="scope"> <span v-show="!scope.row.xEdit">{{ scope.row.cameraX }}</span> <el-input v-show="scope.row.xEdit" size="mini" v-model="scope.row.cameraX"></el-input> </template> </el-table-column> <el-table-column prop="cameraY" label="坐标位置:Y"> <template slot-scope="scope"> <span v-show="!scope.row.yEdit">{{ scope.row.cameraY }}</span> <el-input v-show="scope.row.yEdit" size="mini" v-model="scope.row.cameraY"></el-input> </template> </el-table-column> <el-table-column prop="cameraZ" label="坐标位置:Z"> <template slot-scope="scope"> <span v-show="!scope.row.zEdit">{{ scope.row.cameraZ }}</span> <el-input v-show="scope.row.zEdit" size="mini" v-model="scope.row.cameraZ"></el-input> </template> </el-table-column> </el-table>

输出效果

2. 双击或单击行中单元格进行编辑激活

添加行双击或单机监听事件

element-ui table中提供了单元格被双击或单击的监听事件

html代码

<el-table :data="list" stripe style="width: 100%" @cell-dblclick="openEditColumn"></el-table>

js代码

// 打印输出测试 openEditColumn(row, column, cell, event) { console.log(row, column); },

输出效果

激活单元格进入编辑状态

// 由于设定了多个可编辑字段      ,在此处需要针对判断 openEditColumn(row, column, cell, event) { console.log(row, column) if (column.property === "cameraX") { this.equipmentList.cameras.forEach(item => { if (item.id === row.id) { // 激活当前点击的单元格进入可以编辑(span与el-input标签显示隐藏切换) item.xEdit = true } }); } else if (column.property === "cameraY") { this.equipmentList.cameras.forEach(item => { if (item.id === row.id) { item.yEdit = true } }); } else if (column.property === "cameraZ") { this.equipmentList.cameras.forEach(item => { if (item.id === row.id) { item.zEdit = true } }); } },

效果如下

3. 编辑内容并保存数据关闭编辑状态

HTML代码

<!-- 给对应编辑的单元格中的el-input添加光标移除后触发事件      ,进行数据保存与编辑状态关闭 --> <el-table-column prop="cameraX" label="坐标位置:X"> <template slot-scope="scope"> <span v-show="!scope.row.xEdit">{{ scope.row.cameraX }}</span> <el-input @blur="editColumnData(scope.row, cameraX)" @keyup.enter.native="editColumnData(scope.row, cameraX)" v-show="scope.row.xEdit" size="mini" v-model="scope.row.cameraX"></el-input> </template> </el-table-column>

JS代码

// 表格数据编辑保存并关闭编辑 /** * row:当前编辑行数据 * column:当前编辑列名称(区分作用) */ editColumnData(row, column) { // 关闭表格编辑 this.list.forEach(item => { if (item.id === row.id) { if (column === "cameraX") { item.xEdit = false; } else if (column === "cameraY") { item.yEdit = false; } else if (column === "cameraZ") { item.zEdit = false; } } }); },

效果如下

4. 完整代码

<template> <div class="app-container"> <el-table :data="list" stripe style="width: 100%" @cell-dblclick="openEditColumn"> <el-table-column prop="cameraX" label="坐标位置:X"> <template slot-scope="scope"> <span v-show="!scope.row.xEdit">{{ scope.row.cameraX }}</span> <el-input @blur="editColumnData(scope.row, cameraX)" @keyup.enter.native="editColumnData(scope.row, cameraX)" v-show="scope.row.xEdit" size="mini" v-model="scope.row.cameraX"></el-input> </template> </el-table-column> <el-table-column prop="cameraY" label="坐标位置:Y"> <template slot-scope="scope"> <span v-show="!scope.row.yEdit">{{ scope.row.cameraY }}</span> <el-input @blur="editColumnData(scope.row, cameraY)" @keyup.enter.native="editColumnData(scope.row, cameraY)" v-show="scope.row.yEdit" size="mini" v-model="scope.row.cameraY"></el-input> </template> </el-table-column> <el-table-column prop="cameraZ" label="坐标位置:Z"> <template slot-scope="scope"> <span v-show="!scope.row.zEdit">{{ scope.row.cameraZ }}</span> <el-input @blur="editColumnData(scope.row, cameraZ)" @keyup.enter.native="editColumnData(scope.row, cameraZ)" v-show="scope.row.zEdit" size="mini" v-model="scope.row.cameraZ"></el-input> </template> </el-table-column> </el-table> </div> </template> <script> export default { name: "handleViewCamera", components: {}, props: { }, data() { return { list: {}, }; }, created() { }, mounted() { this.getList(); }, methods: { // 获取数据列表 getList() { queryList(this.regionId).then((res) => { res.data.cameras.forEach(item => { item.xEdit = false; item.yEdit = false; item.zEdit = false; this.list.push(item) }); }); }, // 打开信息编辑 openEditColumn(row, column, cell, event) { if (column.property === "cameraX") { this.equipmentList.cameras.forEach(item => { if (item.id === row.id) { // 激活当前点击的单元格进入可以编辑(span与el-input标签显示隐藏切换) item.xEdit = true } }); } else if (column.property === "cameraY") { this.equipmentList.cameras.forEach(item => { if (item.id === row.id) { item.yEdit = true } }); } else if (column.property === "cameraZ") { this.equipmentList.cameras.forEach(item => { if (item.id === row.id) { item.zEdit = true } }); } }, // 表格数据编辑保存并关闭编辑 editColumnData(row, column) { // 关闭表格编辑 this.list.forEach(item => { if (item.id === row.id) { if (column === "cameraX") { item.xEdit = false; } else if (column === "cameraY") { item.yEdit = false; } else if (column === "cameraZ") { item.zEdit = false; } } }); } }, }; </script> <style lang="scss" scoped></style>

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
提高企业曝光度(提升网站曝光率的终极秘籍) 网站建设前的货源定位优势(打造稳定的电商平台)