vxe-table中动态渲染数据和多级表头的方法

这里的渲染方法主要说的是vxe-table在vue2中渲染数据和多级表头的方法,在vue3中能不能使用这样的方法我并不清楚,当然你可以试一试,我个人觉得99%也是可行的。

vxe-table官网文档地址如下,你可以参考其如何安装导入。

vxe-table v2icon-default.png?t=N7T8https://vxetable.cn/v2/#/table/start/install以下是示例代码:

getData当作是从后端接收到的数据,我们在vxe-table标签上添加ref,这样通过$refs便可以拿到vxe-table这个组件对象,在它的身上有很多方法,我们便可以利用.xxx的方式进行调用,使用el-table上的方法时,也是用到了这种方法。

我们通过调用其身上自带的reloadColumn,reloadData方法,分别实现了对表头以及内容的动态渲染,只要保证传入数据的结构及对应属性准确,便可实现整个表格的渲染。

<template>
  <vxe-table
  ref="vtable"
    border
  ></vxe-table>
</template>

<script>
export default {
  data() {
    return {
      getData:{
        headers: [
        {
          title: '基本信息',
          children: [
            { field: 'name', title: '姓名' },
            { field: 'age', title: '年龄' }
          ]
        },
        {
          title: '附加信息',
          children: [
            { field: 'city', title: '出生地' },
            { field: 'ex', title: '前任' }
          ]
        }
      ],
        data: [
        { name: '永野芽郁', age: 25, city: '东京', ex: '小天才阿阔' },
        { name: '绫濑遥', age: 38, city: '广岛', ex: '小天才阿阔' },
        { name: '石原里美', age: 37, city: '东京', ex: '小天才阿阔' }
      ]
      }
    };
  },
  mounted() {
    // 动态渲染多级表头,只要保证参数结构正确即可,嵌套再深也没有问题
    this.$refs.vtable.reloadColumn(this.getData.headers);
    // 动态渲染数据
    this.$refs.vtable.reloadData(this.getData.data);
  },  
  methods: {
    // 如果后端返回的表头结构内,属性是label,prop的话可以调用此方法
    generateHead(heads) {
      console.log('50',this)
      heads?.forEach((h) => {
        h.field = h.prop;
        delete h.prop
        h.title = h.label;
        delete h.label
        h.children && this.generateHead(h.children);
      });
    },
  }
};
</script>

渲染出来的页面如下:

到这里可能有人不明白我上面自定义的generateHead函数是做什么用的,其实你仔细看下代码就能明白,它就是接收一个数组,然后给数组中每个元素添加一个俩新属性,field,title,并删除掉原本的prop,label属性,为什么要这样做?因为在多数情况下,后端返回的数据都是prop与label,这也是为了契合element ui组件的设计。

这时候你就需要调用下generateHead这个方法了,这里面有个delete大家要注意

注意:

delete 不是 window 对象身上的方法,它是 JavaScript 语言中的一个操作符,用于删除对象的属性或者数组的元素。在浏览器环境中,全局对象是 window,但 delete 并不是 window 对象的一个方法或属性。

如果你不调用generateHead会出现这样的提示:

我们调用下,这里注意看我headers里面换成了label,prop,已经不是最开始的title,field了

<template>
  <vxe-table
  ref="vtable"
    border
  ></vxe-table>
</template>

<script>
export default {
  data() {
    return {
      getData:{
        headers: [
        {
          label: '基本信息',
          children: [
            { prop: 'name', label: '姓名' },
            { prop: 'age', label: '年龄' }
          ]
        },
        {
          label: '附加信息',
          children: [
            { prop: 'city', label: '出生地' },
            { prop: 'ex', label: '前任' }
          ]
        }
      ],
        data: [
        { name: '永野芽郁', age: 25, city: '东京', ex: '小天才阿阔' },
        { name: '绫濑遥', age: 38, city: '广岛', ex: '小天才阿阔' },
        { name: '石原里美', age: 37, city: '东京', ex: '小天才阿阔' }
      ]
      }
    };
  },
  mounted() {
    // 对表头数据进行处理
    this.generateHead(this.getData.headers)
    console.log(this.getData.headers)
    // this.generateHead(this.getData.headers)
    // 动态渲染多级表头,只要保证参数结构正确即可,嵌套再深也没有问题
    this.$refs.vtable.reloadColumn(this.getData.headers);
    // 动态渲染数据
    this.$refs.vtable.reloadData(this.getData.data);
  },  
  methods: {
    // 如果后端返回的表头结构内,属性是label,prop的话可以调用此方法
    generateHead(heads) {
      console.log('50',this)
      heads?.forEach((h) => {
        h.field = h.prop;
        delete h.prop
        h.title = h.label;
        delete h.label
        h.children && this.generateHead(h.children);
      });
    },
  }
};
</script>

然后浏览器上的提示就消失了,更多细节可将代码复制粘贴到自己的电脑上进行尝试,不过在那之前记得先安装导入好vxe-table的相关东西。

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
vxe-tablevxe-column是基于Vue.js的表格组件,可以实现多级表头。下面是一个示例代码,演示了如何使用vxe-tablevxe-column实现多级表头: ```vue <template> <vxe-table :data="tableData" border show-header> <vxe-column type="index" title="序号"></vxe-column> <vxe-column title="基本信息"> <vxe-column title="姓名" field="name"></vxe-column> <vxe-column title="年龄" field="age"></vxe-column> </vxe-column> <vxe-column title="联系方式"> <vxe-column title="电话" field="phone"></vxe-column> <vxe-column title="邮箱" field="email"></vxe-column> </vxe-column> <vxe-column title="操作"> <vxe-column title="编辑" :render-header="renderEditHeader"></vxe-column> <vxe-column title="删除" :render-header="renderDeleteHeader"></vxe-column> </vxe-column> </vxe-table> </template> <script> import 'vxe-table/lib/style.css'; import { VXETable } from 'vxe-table'; export default { data() { return { tableData: [ { name: '张三', age: 20, phone: '123456789', email: 'zhangsan@example.com' }, { name: '李四', age: 25, phone: '987654321', email: 'lisi@example.com' }, ], }; }, methods: { renderEditHeader({ column }) { return <span>{column.title}(编辑)</span>; }, renderDeleteHeader({ column }) { return <span>{column.title}(删除)</span>; }, }, mounted() { VXETable.setup({ size: 'mini', }); }, }; </script> ``` 在上面的代码,我们使用了vxe-tablevxe-column组件来创建一个表格。通过嵌套vxe-column组件,我们可以实现多级表头。每个vxe-column组件都代表一个表头列,可以设置title属性来定义列的标题,field属性来指定列对应的数据字段。 在示例,我们创建了一个基本的表格,包含了基本信息和联系方式两个多级表头。每个表头列都可以自定义渲染,通过render-header属性来指定渲染函数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值