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中常用的55个经典技巧
Aug 12 Javascript
Extjs407 getValue()和getRawValue()区别介绍
May 21 Javascript
js传中文参数controller里获取参数乱码问题解决方法
Jan 03 Javascript
jQuery html()方法使用不了无法显示内容的问题
Aug 06 Javascript
JavaScript解析json格式数据简单示例
Dec 09 Javascript
浅析javascript中的DOM
Mar 01 Javascript
Javascript如何判断数据类型和数组类型
Jun 22 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
Nov 21 Javascript
详解Angular 4.x 动态创建组件
Apr 25 Javascript
移动web开发之touch事件实例详解
Jan 17 Javascript
webpack4 入门最简单的例子介绍
Sep 05 Javascript
JS高级程序设计之class继承重点详解
Jul 07 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
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
PHP基础之运算符的使用方法
2013/04/28 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
jQuery之浮动窗口实现代码(两种方法)
2010/09/08 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
React Native基础入门之调试React Native应用的一小步
2018/07/02 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
2018/12/20 Javascript
js实现简单的打印表格
2020/01/15 Javascript
js制作提示框插件
2020/12/24 Javascript
Python基本数据类型详细介绍
2014/03/11 Python
python中的多线程实例教程
2014/08/27 Python
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
Python基于time模块求程序运行时间的方法
2017/09/18 Python
python实现年会抽奖程序
2019/01/22 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
2020/07/23 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
某公司面试题
2012/03/05 面试题
《会走路的树》教后反思
2014/04/19 职场文书
义诊活动通知
2015/04/24 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
六年级作文之家庭作文
2019/12/12 职场文书
Go各时间字符串使用解析
2021/04/02 Golang
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python