前言
在使用ElementUI过程中,表格的使用占了很大一部分,但是使用起来总感觉不方便,而且部分想要的功能也没有。这促使我在ElementUI 表格组件上再进行一次封装。在这基础上添加所需功能,并且要使用更方便,但是不能破坏原有功能。
此项目已经上传GitHub,欢迎交流,希望能给个star鼓励一下,谢谢^-^。
在线Demo
效果
主要内容
- 数据化结构(减少html代码)
- 可编辑单元格(同时满足不同编辑形式)
- 自定义显示单元格内容 (el-table-column作用域插槽的数据结构版)
- 自定义下拉筛选(获取远程下拉筛选条件,自定义下拉筛选形式)
- 选择数据简单化(单击选择/取消,快捷多选,连续多选)
- 保证原有功能
因为代码太多所以没有全部放,只抽出部分讲解,感兴趣的小伙伴可以到GitHub下载一份源码。
数据化结构
将原有的html结构变为数据结构,只用写一个数组传入就可生成想要的结构
这样数据化之后可以更方便操作,结构也更清晰。每一个el-table-column
对应columns
数组中的一个元素,可以嵌套实现多级表头。元素里面可以包含所有el-table-column
上的属性。
实现方式
通过render
函数循环嵌套生成,也可以写.vue
的单文件用html结构生成,但是没有render
函数生成可操控性高,render
函数可以更加精确的操控元素,也更加贴近编译器。还没用过的同学赶快学习一下把 render
可编辑单元格
网上很多的ElementUI表格可编辑表格教程都是一整行的切换编辑状态,这不是我想要的。应该是每个单元格都可以控制编辑状态
实现方式
自定义单元格显示
在使用html结构时可以使用作用域插槽进行自行自定义显示,而现在数据化结构后只能使用使用数据化方式,最为合理且唯一的应该就是调用render
函数渲染自定义内容了。(如果写成字符串解析成html,有很多问题,无法使用组件,无法绑定事件…)
实现方式
自定义下拉筛选
ElementUI 表格自带自由两种下拉筛选形式的选择而且需要先给定值,不能满足下拉筛选数据异步从服务器拿数据的需求。所以为了保留原来自带的下拉功能,就要将这两种方式区别开来。添加defaultHeader
属性,为true则使用默认列表头,否则使用自定义表头。
实现方式
因为下拉内容为独立出来的部分,所以使用el-popover
组件组为载体,显示下拉筛选内容,将popover单独封装为组件当点击下拉筛选按钮时再实例化显示它。
选择数据简单化
这个内容在之前已经单独讲过,Element UI 表格点击选中行/取消选中 快捷多选 以及快捷连续多选,高亮选中行;
结语
修改这些功能主要靠render
函数的特性,虽然结构看起来不宜读(可采用jsx语法),但是能够更好的完成需求,也算将功补过吧,总的来说完成的还算比较满意。如果有什么建议,或则有什么更好的方式完成这些需求,欢迎交流。