美文网首页
elementUI 表格宽度自适应、不换行

elementUI 表格宽度自适应、不换行

作者: 一只佛手 | 来源:发表于2022-11-25 14:41 被阅读0次

    问题

    表格数据出现折行,如图:


    image.png

    解决方案一

    • 表格加table-layout='auto’属性
    • 表格加tableAuto类名
    • el-table-column标签不设置宽度
    <el-table :data="tableData"  table-layout='auto' class="tableAuto">
         <el-table-column prop="name" label="名称" />
     </el-table>
    
    //设置超出不折行
    .tableAuto.el-table .cell {
      white-space: nowrap;
    }
    

    弊端:
    1.el-table-column左侧多个列加fixed属性,左右滑动,列宽得提前计算
    2.el-table设置table-layout='auto’ 与 固定表头 的功能冲突,表头无法再固定

    解决方案二(推荐)

    此方案能避免方案一的两个弊端,不影响其他属性,有利于功能拓展
    el-table-column加width属性

    <el-table :data="tableData>
           <el-table-column prop="workDate" :label="colObj.workDate.label" :min-width="colObj.workDate.width"/>
      </el-table>
    

    canvas动态计算el-table-column宽度,结合computed,优化计算性能

     /**
         * 计算table每一列的宽度
         * @param colLabel 每列title {workDate: '班组',userNo: '工号',date: '生产日期',isQ: '是否质检'}
         * @param tableData 表格数据
         * @returns 列信息 {workDate: {label: '班组', width: 206},...}
         *
         */
        function calColWidth(colLabel, tableData){
          let canvas = document.createElement("canvas");
          let context = canvas.getContext("2d");
          context.font = "14px Microsoft YaHei";
          return computed(()=>{
            let res = {};
            for(let key in colLabel){
              //初始化res,计算label的宽度,24为单元格左右padding和为24px
              res[key] = {
                label: colLabel[key],
                width: context.measureText(colLabel[key]).width + 24
              };
            }
            //遍历表格数据
            for(let i = 0; i< tableData.list.length; i++){
              for(let key in colLabel){
                const curContent = tableData.list[i][key] + '';
                const curWidth = context.measureText(curContent).width + 24;
                if(curWidth > res[key].width){
                  res[key].width = curWidth;
                }
              }
            }
            console.log(res);
            return res;
          })
        }
        const colLabel = {
          workDate: '班组',
          userNo: '工号',
          date: '生产日期',
          isQ: '是否质检',
        };
        const colObj = calColWidth(colLabel, productTableData);
    

    ————————————————
    参考链接:https://blog.csdn.net/luoyumeiluoyumei/article/details/125853152

    相关文章

      网友评论

          本文标题:elementUI 表格宽度自适应、不换行

          本文链接:https://www.haomeiwen.com/subject/zbcxfdtx.html