侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

vue+element实现表格新增、编辑、删除功能

前端  /  管理员 发布于 4年前   990

需要做一个需求:新增一个xml文件时,添加数量不确定、属性相同的xml标签,想了想可以用表格做啊,属性相同,使用统一的表头,下面的属性值只是进行增删改不就行了,就类似于mysql给表里填数据一样。

可是目前似乎还没有表格的直接增删改一行的操作,那要怎么实现呢?于是,通过上网以及自己的思考,终于实现了,代码、思路以及效果图如下:

1 html部分:

新增

2 样式部分

3.data定义:

rules: { fileName: [ { required: true, message: '请输入文件路径', trigger: 'blur' } ], policyfileName: [ { required: true, message: '请输入文件路径', trigger: 'blur' } ], parmna: [ { required: true, message: '请输入数据字段名称', trigger: 'blur' } ], remark: [ { required: true, message: '请输入分组类型名称', trigger: 'blur' } ] }, activeName: 'include', tabPosition: 'left', dialogFormVisible: false, formQuery:[], serverForm: { fileName: '', policyfileName: '',//policy下的include scmType: '', version: '', address: '' }, tableData: [{ name: 'aa', xpath: 'bb', desc: 'cc', value: 'dd', defVal: 'ee' }, { name: 'aa1', xpath: 'bb1', desc: 'cc1', value: 'dd1', defVal: 'ee1'}]

4 具体方法:

deleteRow(index, rows) {//移除一行 rows.splice(index, 1);//删掉该行 }, addRow(tableData,event){//新增一行 //之前一直想不到怎么新增一行空数据,最后幸亏一位朋友提示:表格新增一行,其实就是源数据的新增,从源数据入手就可以实现了,于是 恍然大悟啊! tableData.push({ name: '', xpath: '',desc:'',value:'',defVal:'' }) },tableDbEdit(row, column, cell, event) {//编辑单元格数据//当鼠标双击单元格里面具体单元格的时候,即可对数据进行编辑操作,其实就是添加了一个输入框,最终将输入框中的数据保存下来就行了。 event.target.innerHTML = ""; let cellInput = document.createElement("input"); cellInput.value = ""; cellInput.setAttribute("type", "text"); cellInput.style.width = "60%"; cell.appendChild(cellInput); cellInput.onblur = function() { cell.removeChild(cellInput); event.target.innerHTML = cellInput.value; };}

效果如下

――――――――分割线―――――――C

之前实现的都是input框的方式,昨天又做了个优化,增加了下拉框的方式,并且新增了提交表单时,能够将数据传到后端的功能。

首先我们知道,select标签的格式,比较特殊,没有input那么直接,每次只需要修改,展示它本身的value属性的值就OK了,select的标签格式如下:

那么, 我的修改之后的编辑方法如下:

tableDbEdit(row, column, cell, event) { event.target.innerHTML = ""; let cellInput = ''; let name = column.property.trim();//拿到当前的属性值 //新建一个option元素 let option = document.createElement('option') let option2 = document.createElement('option') if(name==="fildtp"){ cellInput = document.createElement("select"); //为option赋值和内容 option.value="1"; option.text="字符"; option2.value="2"; option2.text="数字"; //将option元素直接添加为子元素 cellInput.appendChild(option); cellInput.appendChild(option2); cell.appendChild(cellInput); cellInput.onblur = function() { cell.removeChild(cellInput); //将单元格的内容填充为所选中元素的内容,而不是值 event.target.innerHTML = cellInput.selectedOptions[0].text; //将所选中元素的值赋给该行的值,每个属性都执行一次赋值,那么在最终提交表单的时候,就能保证当前表的值传到后端 row.fildtp=cellInput.value; } }else if(name==="musttg"){ cellInput = document.createElement("select"); option.value="1"; option.text="是"; option2.value="0"; option2.text="否"; cellInput.appendChild(option); cellInput.appendChild(option2); cell.appendChild(cellInput); cellInput.onblur = function() { cell.removeChild(cellInput); event.target.innerHTML = cellInput.selectedOptions[0].text; row.musttg=cellInput.value; } }else if(name==="looptg"){ cellInput = document.createElement("select"); option.value="1"; option.text="循环"; option2.value="0"; option2.text="非循环"; cellInput.appendChild(option); cellInput.appendChild(option2); cell.appendChild(cellInput); cellInput.onblur = function() { cell.removeChild(cellInput); event.target.innerHTML = cellInput.selectedOptions[0].text; row.looptg=cellInput.value; }; }else{ debugger cellInput = document.createElement("input"); cellInput.value = ""; cellInput.setAttribute("type", "text"); cellInput.style.width = "75%"; cell.appendChild(cellInput); cellInput.onblur = function() { cell.removeChild(cellInput); event.target.innerHTML = cellInput.value; if(name==="fildcd"){ row.fildcd=cellInput.value; }else if(name==="fildna"){ row.fildna=cellInput.value; }else if(name==="fildln"){ row.fildln=cellInput.value; }else if(name==="fildde"){ row.fildde=cellInput.value; }else if(name==="defult"){ row.defult=cellInput.value; }else if(name==="format"){ row.format=cellInput.value; }else if(name==="enumcd"){ row.enumcd=cellInput.value; }else if(name==="loophd"){ row.loophd=cellInput.value; }else if(name==="remark"){ row.remark=cellInput.value; } }; }},

这种方式,比较详细,也比较容易理解,但是总感觉有点不完美,首先新增了一行以后,必须要双击某一个单元格参能进行内容的输入,不够明显。从代码上来说,代码量也较大;而且使用的是原生的html标签,因此,我在之后对此进行了一个优化,直接使用vue的代码实现,不仅大大减少了代码量,还实现了操作的友好性。具体实现可以查看的我的文章:Vue+Element实现表格的编辑、删除、以及新增行的最优方法

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

您可能感兴趣的文章:

  • vue+element 模态框表格形式的可编辑表单实现
  • Vue+Element实现表格编辑、删除、以及新增行的最优方法
  • vue+element-ui实现表格编辑的三种实现方式
  • VUE+Element UI实现简单的表格行内编辑效果的示例的代码
  • vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
  • vue+iview 实现可编辑表格的示例代码
  • 对Vue table 动态表格td可编辑的方法详解
  • Vue封装的可编辑表格插件方法
  • Vue.js实现可编辑的表格


  • 上一条:
    Vue实现表格批量审核功能实例代码
    下一条:
    Javascript三种字符串连接方式及性能比较
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 使用 Alpine.js 排序插件对元素进行排序(0个评论)
    • 在js中使用jszip + file-saver实现批量下载OSS文件功能示例(0个评论)
    • 在vue中实现父页面按钮显示子组件中的el-dialog效果(0个评论)
    • 使用mock-server实现模拟接口对接流程步骤(0个评论)
    • vue项目打包程序实现把项目打包成一个exe可执行程序(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-03
    • 2018-04
    • 2018-05
    • 2018-06
    • 2018-09
    • 2018-11
    • 2018-12
    • 2019-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-04
    • 2021-05
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客