Vue动态设置el-table操作列的宽度自适应

 更新时间:2023年07月20日 17:06:09   作者:深海蓝山  
这篇文章主要给大家介绍了关于Vue如何动态设置el-table操作列的宽度自适应,很多页面都需要用到表格组件el-table,如果没有给el-table-column指定宽度,默认情况下会平均分配给剩余的列,需要的朋友可以参考下

一、问题

用el-table组件开发时,对于表格的操作列的自适应宽度是一个问题,如果不设置,操作按钮多时会有换行问题。如果设置最小宽度或宽度时,又会出现当条件不满足时,按钮显示的少,但操作列的宽度太宽,显示多余的空白。尤其对于字段较多,操作列固定情况下,现得特别浪费空间。

宽度不足情况

宽度充足但条件不足情况

期望情况

操作列可以根据按钮情况自适应宽度,按钮少时宽度变小,按钮多时自动增加宽度。

二、解决方案

网上查了一下对列内容的自适应的方案较多,但对操作列的自适应却没有找到相关的方案。不过按照内容自适应的方案的原理,本人实现了一下,发现可以解决。

思路

通过CSS的 white-space: nowrap; display: inline-block设置内容不换行,然后计算div的宽度来重新设置列头属性,
依赖属性:

  • CSS:white-space: nowrap; display: inline-block
  • Table-column Attributes:render-header:列标题 Label 区域渲染使用的 Function

代码示例

<template>
  <div>
    <el-table :data="tableData" style="width: 100%" :border="true" fit>
      <el-table-column type="index" width="50" label="No" fixed> </el-table-column>
      <el-table-column prop="date" label="日期" width="150" fixed> </el-table-column>
      <el-table-column prop="name" label="姓名" width="120"> </el-table-column>
      <el-table-column prop="province" label="省份" width="120"> </el-table-column>
      <el-table-column prop="address" label="地址" minWidth="260"> </el-table-column>
      <el-table-column prop="zip" label="邮编" minWidth="120"> </el-table-column>
      <el-table-column label="操作" fixed="right" :render-header="renderHeader">
        <template slot-scope="scope">
          <div class="optionDiv" style="white-space: nowrap; display: inline-block">
            <el-button type="text" size="small"> 新增 </el-button>
            <el-button type="text" size="small"> 编辑 </el-button>
            <el-button v-if="scope.row.type == 2 || scope.row.type == 3" type="text" size="small"> 移除 </el-button>
            <el-button v-if="scope.row.type == 2 || scope.row.type == 3" type="text" size="small"> 详情 </el-button>
            <el-button v-if="scope.row.type == 3 || scope.row.type == 3" type="text" size="small"> 下发 </el-button>
          </div>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>
<script>
export default {
  data() {
    return {
      tableData: [
        {
          date: '2016-05-03',
          name: '王小虎',
          province: '上海',
          address: '上海市普陀区金沙江路 1518 弄',
          zip: 200333,
          type: 1
        },
        {
          date: '2016-05-02',
          name: '王小虎',
          province: '上海',
          address: '上海市普陀区金沙江路 1518 弄',
          zip: 200333,
          type: 2
        },
        {
          date: '2016-05-02',
          name: '王小虎',
          province: '上海',
          address: '上海市普陀区金沙江路 1518 弄',
          zip: 200333,
          type: 3
        }
      ]
    };
  },
  methods: {
    // 表头部重新渲染
    renderHeader(h, { column, $index }) {
      // 获取操作按钮组的元素
      const opts = document.getElementsByClassName('optionDiv');
      let widthArr = [];
      // 取操作组的最大宽度
      Array.prototype.forEach.call(opts, function (item) {
        if (item.innerText) {
          widthArr.push(item.offsetWidth);
        }
      });
      // 重新设置列标题及宽度属性
      if (widthArr.length > 0) {
        column.width = Math.max(...widthArr) + 24;
        return h('span', column.label);
      } else {
        column.width = 0;
        return h('span', column.label);
      }
    }
  }
};
</script>

最终效果

分别为两列、三列和四列操作的展示效果

总结

到此这篇关于Vue动态设置el-table操作列的宽度自适应的文章就介绍到这了,更多相关el-table列宽度自适应内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue基础语法之插值表达式详解

    vue基础语法之插值表达式详解

    这篇文章主要为大家详细介绍了vue基础语法之插值表达式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • vue中使用微信公众号js-sdk踩坑记录

    vue中使用微信公众号js-sdk踩坑记录

    这篇文章主要介绍了vue中使用微信公众号js-sdk踩坑记录,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • 详解vue中父子组件传递参数props的实现方式

    详解vue中父子组件传递参数props的实现方式

    这篇文章主要给大家介绍了在vue中,父子组件传递参数 props 实现方式,文章通过代码示例介绍的非常详细,对我们的学习或工作有一定的参考价值,需要的朋友可以参考下
    2023-07-07
  • vue中@click绑定事件点击不生效的解决

    vue中@click绑定事件点击不生效的解决

    这篇文章主要介绍了vue中@click绑定事件点击不生效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • axios接口管理优化操作详解

    axios接口管理优化操作详解

    这篇文章主要为大家介绍了axios接口管理优化操作详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • vue 本地服务不能被外部IP访问的完美解决方法

    vue 本地服务不能被外部IP访问的完美解决方法

    这篇文章主要介绍了vue 本地服务不能被外部IP访问的解决方法,本文通过代码讲解的非常详细,需要的朋友可以参考下
    2018-10-10
  • vue项目中按需引入element-ui的正确实现方法

    vue项目中按需引入element-ui的正确实现方法

    这篇文章主要介绍了vue项目中按需引入element-ui的正确实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • axios请求二次封装之避免重复发送请求

    axios请求二次封装之避免重复发送请求

    在做vue中大型项目的时候,官方推荐使用axios,但是原生的axios可能对项目的适配不友好,所以在工程开始的来封装一下axios,下面这篇文章主要给大家介绍了关于axios请求二次封装之避免重复发送请求的相关资料,需要的朋友可以参考下
    2022-10-10
  • 浅谈vant组件Picker 选择器选单选问题

    浅谈vant组件Picker 选择器选单选问题

    这篇文章主要介绍了浅谈vant组件Picker 选择器选单选问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Vue echarts绘制甘特图的示例代码

    Vue echarts绘制甘特图的示例代码

    甘特图是一种条状图,直观展示项目进展随时间的走势及联系,其中,项目时间由横轴表示,项目活动由纵轴表示,本文给大家介绍了Vue echarts绘制甘特图的实现方法,并有详细的代码示例供大家参考,需要的朋友可以参考下
    2024-03-03

最新评论