vue+element-ui实现表格编辑的三种实现方式


Posted in Javascript onOctober 31, 2018

1、表格内部显示和编辑切换

这种方式就是利用两个标签显示隐藏来实现,我们这里用input和span,正常用span将数据显示,点击编辑时,将span隐藏,显示input进行编辑。选中当前行我们可以通过slot-scope中的index去实现,在控制显示隐藏的属性上绑定index就可以选中当前行了,如showEdit[index]。

页面结构代码:

<el-table
 :data="tableData"
 tooltip-effect="dark"
 style="width: 100%"
 header-align="center">
 <el-table-column width="50" header-align="center">
  <template slot-scope="{row,$index}">
   <span>{{$index + 1}}</span>
  </template>
 </el-table-column>
 <el-table-column label="名称" prop="Name" width="300" header-align="center">
  <template slot-scope="{row,$index}">
   <input class="edit-cell" v-if="showEdit[$index]" v-model="row.Name">
   <span v-if="!showEdit[$index]">{{row.Name}}</span>
  </template>
 </el-table-column>
 <el-table-column
  fixed="right"
  label="操作"
  width="100"
  header-align="center">
  <template slot-scope="{row,$index}">
   <el-button type="text" size="small"  @click.native="handleUpdate($index, row)"  v-if="showBtn[$index]">更新</el-button>
   <el-button type="text" size="small"  @click.native="handleCancel($index, row)"  v-if="showBtn[$index]">取消</el-button>

   <el-button type="text" size="small"  @click.native="handleEdit($index, row)"  v-if="!showBtn[$index]">编辑</el-button>
   <el-button type="text" size="small"  @click.native="handleDelete($index, row)"  v-if="!showBtn[$index]">删除</el-button>
  </template>
 </el-table-column>
</el-table>

初始化data:

data() {
 return {
  showEdit: [], //显示编辑框
  showBtn: [],
  showBtnOrdinary: true
 }
}

实现方法:

//点击编辑
handleEdit(index, row) {
 this.showEdit[index] = true;
 this.showBtn[index] = true;
 this.$set(this.showEdit,row,true)
 this.$set(this.showBtn,row,true)
},
//取消编辑
handelCancel(index, row) {
 this.getContentList();
 this.showEdit[index] = false;
 this.showBtn[index] = false;
   },

//点击更新
handleUpdate(formName) {

},
//点击删除
handleDelete(index, row) {

},

初始化的时候最好给数组遍历赋值

for(var i = 0; i < 100; i ++) {
 this.showEdit[i] = false;
 this.showBtn[i] = false;
 this.$set(vm.showEdit[i], false);
 this.$set(vm.showBtn[i], false);
}

另外还可以给row自身添加一个属性,通过row.showEdit来控制每一行的编辑。上面说的这些在我的开发环境实现一点问题都没有,但是测试出来了很多bug(没反应、点击第一次第二次没反应等),后来又查询了一下vue的官方文档“异步队列更新”,可能需要加一个Vue.nextTick(callback)。项目比较紧换了另外一种实现方式。有兴趣的小伙伴可以看看官方文档:https://cn.vuejs.org/v2/guide/reactivity.html

2、通过弹出另外一个表格编辑

这个是网上找的一篇文章去实现的,原文链接:https://3water.com/article/149870.htm

另外,github上还有实现的代码,不知道是不是同一个人,为了尊重原创,地址都放在这里:https://github.com/Recklesslmz/elementUI

这种方式实现就简单多了,初始化table代码同上,但是可以去掉input编辑框,和showEdit属性,还需要创建一个隐藏的dialog,里面放另外一张表单:

<el-dialog title="编辑"
 :visible.sync="editFormVisible"
 :close-on-click-modal="false"
 class="edit-form"
 :before-close="handleClose">
 <el-form :model="editForm" label-width="80px" :rules="editFormRules" ref="editForm">
  <el-form-item label="名称" prop="Name">
   <el-input v-model="editForm.name" auto-complete="off"></el-input>
  </el-form-item>
 </el-form>
 <div slot="footer" class="dialog-footer">
  <el-button @click.native="handleCancel('editForm')">取消</el-button>
  <el-button type="primary" @click.native="handleUpdate('editForm')">更新</el-button>
 </div>
</el-dialog>

初始化data:

editFormVisible: false, //默认不显示编辑弹层

方法:

//点击编辑
handleEdit(index, row) {
 this.editFormVisible = true;
 this.editForm = Object.assign({}, row); //这句是关键!!!
},

//点击关闭dialog
handleClose(done) {
 /*done();
 location.reload();*/
 this.editFormVisible = false;
},

//点击取消
handleCancel(formName) {
 this.editFormVisible = false;
},

//点击更新
handleUpdate(forName) { 
 //更新的时候就把弹出来的表单中的数据写到要修改的表格中
 var postData = {
  name: this.editForm.name;
 }

 //这里再向后台发个post请求重新渲染表格数据
 this.editFormVisible = false;
}

3.直接通过样式控制

element-ui中的表格鼠标选中行的时候,行class会自动添加一个current-row,所以通过设置这个class控制编辑和不可编辑标签的显示隐藏。具体参考: https://3water.com/article/149877.htm

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js正确获取元素样式详解
Aug 07 Javascript
很好用的js日历算法详细代码
Mar 07 Javascript
JS 各种网页尺寸判断实例方法
Apr 18 Javascript
Extjs4 GridPanel 的几种样式使用介绍
Apr 18 Javascript
jquery中get和post的简单实例
Feb 04 Javascript
JS实现一个列表中包含上移下移删除等功能
Sep 24 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
Aug 02 Javascript
JavaScript EventEmitter 背后的秘密 完整版
Mar 29 Javascript
jQuery实现简易聊天框
Feb 08 jQuery
vue自定义标签和单页面多路由的实现代码
May 03 Javascript
基于vue+element实现全局loading过程详解
Jul 10 Javascript
一分钟学会JavaScript中的try-catch
Dec 14 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
Oct 31 #Javascript
微信小程序实现签到功能
Oct 31 #Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
Oct 31 #Javascript
微信小程序实现自动定位功能
Oct 31 #Javascript
iview在vue-cli3如何按需加载的方法
Oct 31 #Javascript
jQuery+PHP实现上传裁剪图片
Jun 29 #jQuery
vue+iview 实现可编辑表格的示例代码
Oct 31 #Javascript
You might like
Terran建筑一览
2020/03/14 星际争霸
一个简单实现多条件查询的例子
2006/10/09 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
javascript中使用css需要注意的地方小结
2010/09/01 Javascript
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
Zabbix添加Node.js监控的方法
2016/10/20 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
python基础教程之序列详解
2014/08/29 Python
Python中条件判断语句的简单使用方法
2015/08/21 Python
通过Python爬虫代理IP快速增加博客阅读量
2016/12/14 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
python 实现list或string按指定分段
2019/12/25 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
销售顾问的岗位职责
2013/11/13 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
大二法英学生职业生涯规划范文
2014/02/27 职场文书
2014年应急工作总结
2014/12/11 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
食堂卫生管理制度
2015/08/04 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python