vue3封装一个仿ant-design-vue的table组件

最近需要在不使用UI框架的情况下封装一个简单的表格,由于对antd-vue比较熟悉,所以仿照了antd-vue的样子写了个简化版的Table组件。

使用技术:VUE3、SCSS

用过antd-vue的都应该知道table组件主要的传参是两个:columns和dataSource,分别对应表头信息和表格的数据信息。

1.表头数据columns

表头的传参数据结构如下:

[
  { label: '姓名', key: 'name' },
  { label: '年龄', key: 'age' }
]
  • key:必须,用来标志当前行
  • label:非必须,当前列的列头显示内容

子组件-表头的遍历:

vue3封装一个仿ant-design-vue的table组件_第1张图片

2.表格数据dataSource

表格数据传参的数据结构如下:

[
  {name: '张三', age: 24},
  {name: '李四', age: 45}   
]

可以看到dataSource里面的key都是columns里面的key字段对应的值

对应源代码如下:

vue3封装一个仿ant-design-vue的table组件_第2张图片

主要思路是先遍历每一行的数据,再在每一行的数据中根据columns遍历当前列的数据

做到这里不加66行的代码的话,整个表格显示功能就已经实现了。

3.添加操作功能

其实整个功能做起来比较简单,现在回想起来,还是自己对vue3的slot使用不太熟悉。

slot的基本使用见官网

这里能实现这个功能主要看的是作用域插槽的部分

代码还是看上面那张图的65、66两行。

但是columns的传参需要有变化:

[
  { label: '姓名', key: 'name' },
  { label: '年龄', key: 'age' },
  { label: '操作', key: 'operate', slots: 'operate'}   
]

slots参数表示当前列需要使用插槽

父组件使用table组件:


注意:

  • #operate是v-slot的简化写法
  • record是子组件内的slot插槽传过来的参数
  • rowData与Table组件的:rowData对应,即当前tr的内容

接下来贴上使用代码:

vue3封装一个仿ant-design-vue的table组件_第3张图片

可以看到使用基本和antd-vue差别不大了

4.其他功能

目前已经实现了表头固定table可滚动、宽度等基本功能、如果需要添加其他功能的话可以在此基础上添加各种传参即可

5.全部源码:






你可能感兴趣的:(封装过的vue组件,vue.js,javascript,前端)