vue vxe-table自适应表格内容宽度

学习自

https://www.cnblogs.com/huangxiaoxue/p/12034326.html

 <vxe-table
        border
        resizable
        round
        height="100%"
        highlight-hover-row
        align="center"
        :data="tableData"
      >
        <vxe-table-column type="checkbox" width="60"></vxe-table-column>
        <vxe-table-column type="seq" title="序号" width="60"></vxe-table-column>
        <vxe-table-column
          v-for="(item, index) in dealtableColumn"
          :key="item.id"
          :field="item.field"
          :title="item.title"
          :width="item.width"
        ></vxe-table-column>
      </vxe-table>

请求后端获取tableData数据,根据表头字段获取对应tableData数据中相应字段的最长内容,设置表头宽度
值得注意的坑是:vxe-table的宽度只能接受整数值

export default {
  data() {
    return {
      tableData:[],
      dealtableColumn: [],
      tableColumn: [
        {
          title: "户号",
          field: "consNo",
        },
        {
          title: "户名",
          field: "consName",
        },
        {
          title: "地市",
          field: "ds",
        }
      ],
    };
  },
  watch: {
    tableData(valArr) {
      this.dealtableColumn = this.tableColumn.map((item) => {
        const arr = valArr.map((val) => val[item.field]); // 获取每一列的所有数据
        arr.push(item.title); // 把每列的表头也加进去算
        item.width = Math.round(this.getMaxLength(arr) + 40) + "px"; // 每列内容最大的宽度 + 表格的内间距(依据实际情况而定)
        return item;
      });
    },
  },
  methods: {
    // 遍历列的所有内容,获取最宽一列的宽度
    getMaxLength(arr) {
      return arr.reduce((acc, item) => {
        if (item) {
          let calcLen = this.getTextWidth(item);
          if (acc < calcLen) {
            acc = calcLen;
          }
        }
        return acc;
      }, 0);
    },
    // 获取文本宽度
    getTextWidth(str) {
      let width = 0;
      let span = document.createElement("span");
      span.innerText = str;
      document.querySelector("body").appendChild(span);
      width = span.getBoundingClientRect().width;
      span.remove();
      return width;
    },
  },
};
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vxe-table 是一款基于 Vue.js表格组件库,它可以方便地创建和展示表格数据。要实现 vxe-table自适应行高,可以按照以下步骤进行操作: 1. 在使用 vxe-table 组件之前,首先需要在项目中安装并引入 vxe-table 的相关依赖包,并且按照文档提供的方式进行配置和初始化。 2. 在需要展示表格的页面中,通过使用 vxe-table 组件并传入相应的数据来创建表格。可以在表格组件的配置项中设置自适应行高的相关属性。 3. 实现自适应行高的方式有多种,可以根据具体需求选择合适的方法。以下是两种常见的实现方式: - 使用自定义单元格的渲染函数:可以在 column 的 renderConfig 属性中定义一个函数来渲染每个单元格的内容,并根据实际数据的情况来动态计算行高。在渲染函数中,可以使用自定义的样式来调整单元格的高度。 - 使用 CSS 样式:可以根据表格中的内容的不同以及行数的不同,通过编写对应的 CSS 样式来实现自适应行高。可以利用 CSS 的属性值,如 line-height、padding、margin 等来调整行高。 通过以上步骤,我们就可以实现 vxe-table自适应行高。根据具体的需求和实际情况,可以选择不同的实现方式来满足需求。使用 vxe-table 组件库可以简化表格数据展示的操作,同时也提供了丰富的配置项和功能,方便开发人员进行自定义的操作和样式调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值