博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于vue.js实现树形表格的封装
阅读量:5807 次
发布时间:2019-06-18

本文共 1888 字,大约阅读时间需要 6 分钟。

前言

由于公司产品(基于vue.js)需要,要实现一个的功能,百度、google找了一通,并没有发现很靠谱的,也不是很灵活。所以就用vue自己撸了一个,还望大家多多指教。

主要技术点:vue子组件的递归实现及相关样式的实现

树形表格实现

  • 效果图()
  • 主要代码

index.vue页面实现业务逻辑代码,比如树表格上面的一些操作按钮的实现及数据获取。

复制代码
原始数据`list`:是不包含子数据的数据结构,即没有层级结构,例如:[{id:111,parentId:0,name:'父及'},{id:111,parentId:111,name:'子级'}...],通过parentId来获取对应父子层级结构`treeDataSource`:是树表格需要的数据结构,例如:[{id:0,name:'父及',children:[{id:10,name:'子级',children:[]}]},...]复制代码

如果后台返回给你的是原始数据格式,就可以用下面方法封装成树表格可以使用的数据结构:

getTreeData() {      // 取父节点      let parentArr = this.list.filter(l => l.parentId === 0)      this.treeDataSource = this.getTreeData(this.list, parentArr)    },    // 这里处理没有children结构的数据    getTreeData(list, dataArr) {      dataArr.map((pNode, i) => {        let childObj = []        list.map((cNode, j) => {          if (pNode.Id === cNode.parentId) {            childObj.push(cNode)          }        })        pNode.children = childObj        if (childObj.length > 0) {          this.getTreeData(list, childObj)        }      })      return dataArr    }复制代码

tree-table.vue页面。此页面是实现树表格的关健页面。主要代码如下:

复制代码

首先这里的子组件tree-item没有在页面上有引入,但是也可以正常使用。这里就是关健点,因为这个子组件是需要递归实现,所以,需要动态注册到当前组件中。代码如下(由于代码太多,先贴图说明吧,可以看源码):

这里子组件看起来是不是挺奇怪的,但是为了递归他本身,暂时也只想到这种办法。如果有更好的办法,欢迎留言指正。

那么,树表格的结构实现在哪里呢??对,就是在子组件的模版(template)里面,这里就不贴代码了,可以移步到查看。

  • 感谢

收到的指正,现已将原有写法更新,采用来实现,这样页面看起来就更清晰。

components: {			treeItem: () => import('./tree-item.vue')	}复制代码

补充一点:不要只看js部分,css部分才是这个树表格的关健所在。当然里面我采用了大量的计算属性去判断各种样式的展示,还有一种方法,就是在initTreeData方法里面去实现,这个方法就是处理或添加一些我们树表格所使用的信息。比如我现在在里面实现的层级线的偏移量m.bLeft = level === 1 ? 34 : (level - 2) * 16 + 34 这个计算如果没有看明白,可以留言。

最后,此篇乃我的开篇之作,如有问题,还请多多包含,多多指教!!!顺便给我好久没有更新的博客打个广告, 欢迎点击()

  • 源码地址,欢迎star。

参考资源

转载地址:http://moybx.baihongyu.com/

你可能感兴趣的文章
shell编程前言(一)
查看>>
5、centos7.*配置yum的EPEL源及其它源
查看>>
JSON前后台简单操作
查看>>
shell中一些常见的文件操作符
查看>>
CentOS 7 装vim遇到的问题和解决方法
查看>>
JavaScript基础教程1-20160612
查看>>
使用第三方类、库需要注意的正则类RegexKitLite的使用
查看>>
iOS \U7ea2 乱码 转换
查看>>
FCN图像分割
查看>>
ios xmpp demo
查看>>
设计模式之-工厂模式、构造函数模式
查看>>
python matplotlib 中文显示参数设置
查看>>
数据库事务隔离级别
查看>>
os模块大全详情
查看>>
【ros】Create a ROS package:package dependencies报错
查看>>
从内积的观点来看线性方程组
查看>>
kali linux 更新问题
查看>>
HDU1576 A/B【扩展欧几里得算法】
查看>>
廖雪峰javascript教程学习记录
查看>>
WebApi系列~目录
查看>>