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代码
Nov 20 Javascript
jquery实现奇偶行赋值不同css值
Feb 17 Javascript
jQuery点击其他地方时菜单消失的实现方法
Apr 22 Javascript
JavaScript简单获取系统当前时间完整示例
Aug 02 Javascript
Angular企业级开发——MVC之控制器详解
Feb 20 Javascript
jQuery加密密码到cookie的实现代码
Apr 18 jQuery
Js利用prototype自定义数组方法示例
Oct 20 Javascript
javascript实现QQ空间相册展示源码
Dec 12 Javascript
canvas轨迹回放功能实现
Dec 20 Javascript
vue 做移动端微信公众号采坑经验记录
Apr 26 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
Feb 28 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
Jun 17 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
用文本文件实现的动态实时发布新闻的程序
2006/10/09 PHP
Ajax+PHP边学边练 之五 图片处理
2009/12/03 PHP
php绘制一个扇形的方法
2015/01/24 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
PHP sdk实现在线打包代码示例
2020/12/09 PHP
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
js控制CSS样式属性语法对照表
2012/12/11 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
2016/06/21 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
python根据日期返回星期几的方法
2015/07/06 Python
浅谈Python中函数的参数传递
2016/06/21 Python
Python正则表达式经典入门教程
2017/05/22 Python
python中利用xml.dom模块解析xml的方法教程
2017/05/24 Python
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
用python标准库difflib比较两份文件的异同详解
2018/11/16 Python
python机器人运动范围问题的解答
2019/04/29 Python
Python 3.8 新功能全解
2019/07/25 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
浅析与CSS3的loading动画加载相关的transition优化
2015/05/18 HTML / CSS
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
英超联赛的首选足球:Mitre足球
2019/05/06 全球购物
机械工程师求职自我评价
2013/09/23 职场文书
认识深刻的检讨书
2014/02/16 职场文书
公司晚会主持词
2014/03/22 职场文书
交通安全月活动总结
2015/05/08 职场文书
资产移交协议书
2016/03/24 职场文书
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python