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 相关文章推荐
javascript full screen 全屏显示页面元素的方法
Sep 27 Javascript
Jquery的基本对象转换和文档加载用法实例
Feb 25 Javascript
javascript实现图片上传前台页面
Aug 18 Javascript
JS文字球状放大效果代码分享
Aug 19 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
Jun 07 Javascript
js select下拉联动 更具级联性!
Apr 17 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
Aug 02 Javascript
nuxt+axios解决前后端分离SSR的示例代码
Oct 24 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
Feb 09 Javascript
详解用Webpack与Babel配置ES6开发环境
Mar 12 Javascript
jquery实现二级导航下拉菜单效果实例
May 14 jQuery
JS数组转字符串实现方法解析
Sep 04 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
用PHP实现的四则运算表达式计算实现代码
2011/08/02 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
JS IE和FF兼容性问题汇总
2009/02/09 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
JavaScript中的pow()方法使用详解
2015/06/15 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
js密码强度检测
2016/01/07 Javascript
利用AngularJs实现京东首页轮播图效果
2016/09/08 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
Bootstrap Table使用整理(二)
2017/06/09 Javascript
vue使用drag与drop实现拖拽的示例代码
2017/09/07 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
Python 用户登录验证的小例子
2013/03/06 Python
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
利用Python制作动态排名图的实现代码
2020/04/09 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
入团者的自我评价分享
2013/12/02 职场文书
主治医师岗位职责
2013/12/10 职场文书
国贸专业大学生职业生涯规划范文
2014/01/10 职场文书
水电维修专业推荐信
2014/09/06 职场文书
店长岗位职责
2015/02/11 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
黄埔军校观后感
2015/06/10 职场文书
长江七号观后感
2015/06/11 职场文书
python使用torch随机初始化参数
2022/03/22 Python