Vue封装的可编辑表格插件方法


Posted in Javascript onAugust 28, 2018

可任意合并表头,实现单元格编辑。

页面效果如图:

Vue封装的可编辑表格插件方法

页面使用如下:

<template>
 <div>
  <v-table 
   :datat = "tableData" 
   :thlabel="thlabel"
   :isEdit="true">
  </v-table>
 </div>
</template>

<script>
 export default{
  data(){
   return{
    tableData:[{'a':'1','b':'2','c':'3','d':'8'},{'a':'4','b':'5',c:'6',d:'9'}],
    thlabel:[[{label:'测试1',prop:'a',rowspan:'2'},{label:'测试2'},{label:'测试3',colspan:'2'}],
      [{prop:'c',label:'表头2'},{prop:'b',label:'表头3'},{prop:'d',label:'表头4'}]]
   }
  }
 }
</script>

目录结构如下:

Vue封装的可编辑表格插件方法

vtable.vue代码如下:

<template id="vtable"> 
 <table>
  <thead>
   <tr v-for="(i,index) in rownum">
    <th v-for="label in thlabel[index]">{{label.label}}</th>
   </tr>
  </thead>
  <tbody>
   <tr v-for="data in datat">
    <td v-for="key in labelprop" @click="tdEdit($event)"><input type="text" v-model="data[key]"/></td>
   </tr>
  </tbody>
 </table>
</template>

<script>
 export default{
  props:{
   datat:{
    type:Array,
    required:true
   }, 
   thlabel:{//表头数组
    type:Array,
    required:true
   },
   isEdit:{
    type:Boolean,
    required:true
   }
  },
  data(){
   return{
    datata:''
   }
  },
  computed:{
   rownum:function(){//表头行数
    return this.thlabel.length;
   },
   labelprop:function(){//取出表头数据依次对应的字段key
    let thlab = this.thlabel;
    var ar = [];
    for(let i=0;i<thlab.length;i++)
     for(let j=0;j<thlab[i].length;j++){
      for(var key in thlab[i][j]){
       if(key == 'prop'){
        ar.push(thlab[i][j][key])
       }
      }
     }
    return ar;
   },
  },
  mounted:function(){
   this.$nextTick(function(){
    $('td').attr('isEdit',this.isEdit);
    var a = this.thlabel;
    for(let i=0;i<a.length;i++)
     for(let j=0;j<a[i].length;j++){
      for(var key in a[i][j]){
       if(key == 'rowspan'){
        $($('tr').eq(i).find('th').eq(j)).attr('rowspan',a[i][j][key]);
       }else if(key == 'colspan'){
        $($('tr').eq(i).find('th').eq(j)).attr('colspan',a[i][j][key]);
       }
      }
     }
    }
   )
  },
  methods:{
   tdEdit:function(event){
    var h = event.currentTarget;
    if($(h).attr('isEdit')){
     $(h).find('input').attr("readOnly",false);
     $(h).addClass('tdclick').siblings().removeClass('tdclick');
     $(h).addClass('tdclick').parent('tr').siblings().find('td').removeClass('tdclick');
    }else{
     $(h).find('input').attr("readOnly",true);
    }
   }
  } 
 }
</script>

<style>
@import './scss/vtable.css';
</style>

index.js代码如下:

import Vue from 'vue'
import vtable from './vtable/vtable.vue'
import vpagination from './vpagination/vpagination.vue'
const common = {//全局安装
 install:function(Vue){
  Vue.component('vTable',vtable);
  Vue.component('vPag',vpagination);
 }
}
export default common

main.js中引入

import common from './components/common/index.js'
Vue.use(common)

css样式代码:

table {
 border: 1px solid #EBEEF5;
 height: 200px;
 width: 300px;
 text-align: center;
 margin-left: 40px; }
 table td {
 border: 1px solid #EBEEF5;
 position: relative;
 color: #606266; }
 table th {
 text-align: center;
 border: 1px solid #EBEEF5;
 background-color: #F5F7FA;
 color: #909D8F;
 line-height: 60px; }

tr:hover {
 background-color: #F6F8FB; }
.tdclick:after{
 content: ' ';
 position: absolute;
 display: block;
 width: 100%;
 height: 100%;
 top: 0;
 left: 0;
 border: 1px solid blue;
 pointer-events: none;
}
input{
 display: block;
 width: 100%;
 height: 100%;
 text-align: center;
 border: none;
 outline: none;
}
/*# sourceMappingURL=vtable.css.map */

如有错误或可改进的地方,请指正!

以上这篇Vue封装的可编辑表格插件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ext 代码生成器
Aug 07 Javascript
jQuery easyui datagrid动态查询数据实例讲解
Feb 26 Javascript
JS获取select的value和text值的简单实例
Feb 26 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
Apr 06 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
May 09 Javascript
Position属性之relative用法
Dec 14 Javascript
JavaScript用构造函数如何获取变量的类型名
Dec 23 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
Apr 04 Javascript
用 js 写一个 js 解释器过程详解
Aug 02 Javascript
详解javascript void(0)
Jul 13 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
Aug 08 Javascript
vue实现井字棋游戏
Sep 29 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
Aug 28 #Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
Aug 28 #Javascript
JS实现Cookie读、写、删除操作工具类示例
Aug 28 #Javascript
vue组件开发之用户无限添加自定义填写表单的方法
Aug 28 #Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
Aug 28 #Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
Aug 28 #Javascript
vue移动端微信授权登录插件封装的实例
Aug 28 #Javascript
You might like
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
使用jquery实现放大镜效果
2014/09/02 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
JS 对象(Object)和字符串(String)互转方法
2016/05/20 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
Bootstrap按钮组简单实现代码
2017/03/06 Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
2020/06/17 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
jQuery选择器之基本过滤选择器用法实例分析
2019/02/19 jQuery
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
手机浏览器唤起微信分享(JS)
2020/10/11 Javascript
javascript实现搜索筛选功能实例代码
2020/11/12 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
pygame学习笔记(5):游戏精灵
2015/04/15 Python
Python列表list排列组合操作示例
2018/12/18 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
2020/05/25 Python
Python+Opencv实现把图片、视频互转的示例
2020/12/17 Python
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
法律专业应届本科毕业生求职信
2013/10/25 职场文书
音乐学个人的自荐书范文
2013/11/26 职场文书
秋季运动会广播稿
2014/02/22 职场文书
艺术教育实施方案
2014/05/03 职场文书
安全检查汇报材料
2014/12/26 职场文书
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript