美文网首页前端开发那些事儿
element 表格 - 表头太长换行

element 表格 - 表头太长换行

作者: 有你有团 | 来源:发表于2020-05-13 18:48 被阅读0次

问题描述

使用element 表格时做数据呈现时,如果遇到表头字段过多过长,我们的解决办法有以下几种

  1. 给每一列添加 width 属性,指定宽度
  2. 给每一列添加 min-width 属性,指定最小宽度
  3. 使用官网 render-header 列标题 Label 区域渲染使用的 Function
  4. 使用 slot-scope 作用域插槽
  5. 我实现方法

下面我们一一对比一下各种方法使用:最终的作用是让我们的表格样式好看

第一种情况:使用 width 指定列宽 --- element表格列没有指定width属性那么所有列将会等比占满整个表格,字段太长就会换行显示,如果某一列指定width,剩余列会将剩余的表格宽度等比分配

使用

<el-table :data="tableData" style="width: 100%">
  <el-table-column prop="date" label="这是我们自定义的表头实在是太长了它自己放不下换行了" width="380"></el-table-column>
  <el-table-column prop="name" label="姓名" width="180"></el-table-column>
</el-table>

注意:全部指定width,如果字段值太少,那么表格无法占满-展示效果查

企业微信截图_15893406358996.png
第二种情况:使用 min-width 指定最小列宽 --- min-width 作用和width相同,只不过min-width 多了一个作用,当某一列按照element默认指定的等比分配宽度小于min-widhth值的时候,该列最小值就是指定的min-width值

使用

<el-table
  :data="tableData"
  style="width: 100%">
  <el-table-column
    prop="date"
    label="日期"
    min-width="480">
  </el-table-column>
  <el-table-column
    prop="name"
    label="姓名"
    width="180">
  </el-table-column>
  <el-table-column
    prop="address"
    label="地址"
    width="180">
  </el-table-column>
</el-table>
15893394296808.png

注意:如果指定min-width的列宽没有小于指定值,会占满剩余表格宽度

第三种情况:使用 render-header

在使用 render-header 时element会报警告

Comparing to render-header, scoped-slot header is easier to use. We recommend users to use scoped-slot header --> 与呈现头相比,作用域槽头更易于使用。我们建议用户使用作用域槽头。
使用

<el-table-column
    :render-header="labelHead"
    :prop="col.filedName"
    show-overflow-tooltip="true"
     sortable
     :label="col.alias"
     :formatter="formatterTableCol">
</el-table-column>

// js
 methods: {
      labelHead: function(h, { column, $index }) {
        let l = column.label.length
        let f = 16
        column.minWidth = f * (l + 2)//加上一个文字长度
        return h('div', { class: 'table-head', style: { width: '100%' } }, [column.label])
      },
}

提示 我这边有试过用这种方法,总是出现各种问题---有待解决

第四种情况:使用 slot-scope -使用作用域插槽我们可以向表格中添加任意组件

使用

<el-table :data="tableData" style="width: 100%">
  <el-table-column prop="date" label="日期" min-width="280"></el-table-column>
  <el-table-column prop="name" label="姓名" width="180"></el-table-column>
  <el-table-column>
    <template slot="header" >
      <el-button>自定义表头</el-button>
    </template>
    <template slot-scope="scope">
      <el-button size="mini" @click="handleEdit(scope.$index, scope.row)">Edit</el-button>
      <el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)">Delete</el-button>
    </template>
  </el-table-column>
</el-table>
15893403114714.png

重点:使用slot-scope可以实现表格-表头和内容自定义
但是我们依旧无法解决让表头实现不换行全部显示,没有指定宽度的列,依旧等比分配了,里面内容可以设置宽度,但是不起作用。目前没找到好的方法~~~

image.png


思路:如果我们给表格label值特别长的列设置width,其余列不设置不是可以解决?
一般情况我们的表格都是通过v-for循环实现的

<el-table-column
  :label="item.label"
  :prop="item.prop"
  :width="item.width"
  v-for="(item,index) in comTableHead"
  v-show="item.showLable"
  :key="index"
  :formatter="formatterColumn"
  :show-overflow-tooltip="item.showTooltip"
></el-table-column>

这样我们就需要再表头渲染之前处理,根据label值的长度,如果label值长度大于4我们就设置width属性,其余为 "" 不设置
注意: font-size 并不代表字符的长度,是大小,如果设置font-size:16px;不代表一个字符的宽度就是 16,我把页面中font-size设置为16px;这样一个中文字符的宽度就是24, (这种方式处理依赖于文字的大小,文字大小是响应屏幕大小变化,这种方式不适用)---后面又更好的方法再更新

// 表格字段长度超过4
tableHeadLength(label){
  label = label || ""
  if(label && label.length > 4){
    return label.length * 25;
  }else{
    return ""
  }
}

相关文章

网友评论

    本文标题:element 表格 - 表头太长换行

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