• 前端开发之el-table 表头不换行且宽度自适应


    element的table中动态添加表头并设置表头不换行

    前言

    本次讲解的是elemen和element-plus来通过table的标签render-header来实现的

    效果图

    在这里插入图片描述

    element中使用

    在这里插入图片描述

    代码

    <template>
        <div>
            <el-table :data="tableData" style="width: 100%" height="250">
                <el-table-column v-for="col of columns" :key="col.prop"
                    :prop="col.prop" :label="col.label" 
                    align="center" header-align="center" 
                    show-overflow-tooltip 
                    :render-header="renderHeader"></el-table-column>
            </el-table>
        </div>
    </template>
    <script>
    export default {
        data() {
            return {
                columns: [
                    {
                        label: '日期',
                        prop: 'date'
                    },
                     {
                        label: '姓名',
                        prop: 'name'
                    },
                     {
                        label: '省份',
                        prop: 'province'
                    },
                     {
                        label: '市区',
                        prop: 'city'
                    },
                     {
                        label: '地址',
                        prop: 'address'
                    },
                     {
                        label: '邮编',
                        prop: 'zip'
                    },
                     {
                        label: '这是测试字段01',
                        prop: 'test01'
                    },
                     {
                        label: '这是测试字段02',
                        prop: 'test02'
                    },
                     {
                        label: '这是测试字段03',
                        prop: 'test03'
                    },
                     {
                        label: '这是测试字段04',
                        prop: 'test04'
                    }
                ],
                tableData: [
                    {
                        date: '2016-05-03',
                        name: '王小虎',
                        province: '上海',
                        city: '普陀区',
                        address: '上海市普陀区金沙江路 1518 弄',
                        zip: 200333,
                        test01: '这是一条测试数据.这是一条测试数据.这是一条测试数据.',
                        test02: '这是一条测试数据.这是一条测试数据.这是一条测试数据.',
                        test03: '这是一条测试数据.这是一条测试数据.这是一条测试数据.',
                        test04: '这是一条测试数据.这是一条测试数据.这是一条测试数据.'
                    }, {
                        date: '2016-05-02',
                        name: '王小虎',
                        province: '上海',
                        city: '普陀区',
                        address: '上海市普陀区金沙江路 1518 弄',
                        zip: 200333,
                        test01: '测试',
                        test02: '测试',
                        test03: '测试',
                        test04: '测试'
                    }, {
                        date: '2016-05-04',
                        name: '王小虎',
                        province: '上海',
                        city: '普陀区',
                        address: '上海市普陀区金沙江路 1518 弄',
                        zip: 200333,
                        test01: '测试',
                        test02: '测试',
                        test03: '测试',
                        test04: '测试'
                    }, {
                        date: '2016-05-01',
                        name: '王小虎',
                        province: '上海',
                        city: '普陀区',
                        address: '上海市普陀区金沙江路 1518 弄',
                        zip: 200333,
                        test01: '测试',
                        test02: '测试',
                        test03: '测试',
                        test04: '测试'
                    }, {
                        date: '2016-05-08',
                        name: '王小虎',
                        province: '上海',
                        city: '普陀区',
                        address: '上海市普陀区金沙江路 1518 弄',
                        zip: 200333,
                        test01: '测试',
                        test02: '测试',
                        test03: '测试',
                        test04: '测试'
                    }, {
                        date: '2016-05-06',
                        name: '王小虎',
                        province: '上海',
                        city: '普陀区',
                        address: '上海市普陀区金沙江路 1518 弄',
                        zip: 200333,
                        test01: '测试',
                        test02: '测试',
                        test03: '测试',
                        test04: '测试'
                    }, {
                        date: '2016-05-07',
                        name: '王小虎',
                        province: '上海',
                        city: '普陀区',
                        address: '上海市普陀区金沙江路 1518 弄',
                        zip: 200333,
                        test01: '测试',
                        test02: '测试',
                        test03: '测试',
                        test04: '测试'
                    }
                ]
            }
        },
        methods: {
            // 表头部重新渲染
    		renderHeader(h, { column, $index }) {
    			// 新建一个 span
    			let span = document.createElement('span');
    			// 设置表头名称
    			span.innerText = column.label;
    			// 临时插入 document
    			document.body.appendChild(span);
    			// 重点:获取 span 最小宽度,设置当前列,注意这里加了 20,字段较多时还是有挤压,且渲染后的 div 内左右 padding 都是 10,所以 +20 。(可能还有边距/边框等值,需要根据实际情况加上)
    			column.minWidth = span.getBoundingClientRect().width + 20;
    			// 移除 document 中临时的 span
    			document.body.removeChild(span);
    			return h('span', column.label);
    		}
        }
    }
    </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157

    element-plus中使用:没有了h

    代码

    在这里插入图片描述

    <template>
      <div>
        <el-table :data="tableData" style="width: 100%" height="250">
          <el-table-column v-for="col of columns" :key="col.prop" :prop="col.prop" :label="col.label" :render-header="renderHeader" align="center" header-align="center" show-overflow-tooltip >
          </el-table-column>
        </el-table>
      </div>
    </template>
    <script>
    export default {
      name: 'trendsTableHeader',
      data () {
        return {
          columns: [
            {
              label: '日期',
              prop: 'date'
            },
            {
              label: '姓名',
              prop: 'name'
            },
            {
              label: '省份',
              prop: 'province'
            },
            {
              label: '市区',
              prop: 'city'
            },
            {
              label: '地址',
              prop: 'address'
            },
            {
              label: '邮编',
              prop: 'zip'
            },
            {
              label: '这是测试字段01',
              prop: 'test01'
            },
            {
              label: '这是测试字段02',
              prop: 'test02'
            },
            {
              label: '这是测试字段03',
              prop: 'test03'
            },
            {
              label: '这是测试字段04',
              prop: 'test04'
            }
          ],
          tableData: [
            {
              date: '2016-05-03',
              name: '王小虎',
              province: '上海',
              city: '普陀区',
              address: '上海市普陀区金沙江路 1518 弄',
              zip: 200333,
              test01: '这是一条测试数据.这是一条测试数据.这是一条测试数据.',
              test02: '这是一条测试数据.这是一条测试数据.这是一条测试数据.',
              test03: '这是一条测试数据.这是一条测试数据.这是一条测试数据.',
              test04: '这是一条测试数据.这是一条测试数据.这是一条测试数据.'
            }, {
              date: '2016-05-02',
              name: '王小虎',
              province: '上海',
              city: '普陀区',
              address: '上海市普陀区金沙江路 1518 弄',
              zip: 200333,
              test01: '测试',
              test02: '测试',
              test03: '测试',
              test04: '测试'
            }, {
              date: '2016-05-04',
              name: '王小虎',
              province: '上海',
              city: '普陀区',
              address: '上海市普陀区金沙江路 1518 弄',
              zip: 200333,
              test01: '测试',
              test02: '测试',
              test03: '测试',
              test04: '测试'
            }, {
              date: '2016-05-01',
              name: '王小虎',
              province: '上海',
              city: '普陀区',
              address: '上海市普陀区金沙江路 1518 弄',
              zip: 200333,
              test01: '测试',
              test02: '测试',
              test03: '测试',
              test04: '测试'
            }, {
              date: '2016-05-08',
              name: '王小虎',
              province: '上海',
              city: '普陀区',
              address: '上海市普陀区金沙江路 1518 弄',
              zip: 200333,
              test01: '测试',
              test02: '测试',
              test03: '测试',
              test04: '测试'
            }, {
              date: '2016-05-06',
              name: '王小虎',
              province: '上海',
              city: '普陀区',
              address: '上海市普陀区金沙江路 1518 弄',
              zip: 200333,
              test01: '测试',
              test02: '测试',
              test03: '测试',
              test04: '测试'
            }, {
              date: '2016-05-07',
              name: '王小虎',
              province: '上海',
              city: '普陀区',
              address: '上海市普陀区金沙江路 1518 弄',
              zip: 200333,
              test01: '测试',
              test02: '测试',
              test03: '测试',
              test04: '测试'
            }
          ]
        }
      },
      methods: {
        // 表头部重新渲染
        renderHeader ({ column, $index }) {
          // 新建一个 span
          const span = document.createElement('span')
          // 设置表头名称
          span.innerText = column.label
          // 临时插入 document
          document.body.appendChild(span)
          // 重点:获取 span 最小宽度,设置当前列,注意这里加了 20,字段较多时还是有挤压,且渲染后的 div 内左右 padding 都是 10,所以 +20 。(可能还有边距/边框等值,需要根据实际情况加上)
          column.minWidth = span.getBoundingClientRect().width + 20
          // 移除 document 中临时的 span
          document.body.removeChild(span)
          return column.label
        }
      }
    }
    </script>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
  • 相关阅读:
    算法题练习——JS Node+python题解NC53 删除链表的倒数第n个节点、NC127 最长公共子串
    ubuntu系统安装
    使用docker搭建gogs
    SpringCloud中服务间通信方式以及Ribbon、Openfeign组件的使用
    Python自动导入缺失的库
    如何通过ip查询用户的归属地
    瞬间理解防抖和节流
    python 练习--更新
    PSO-CNN模型研究与实现-PSO优化模型内部超参数
    快捷输入法怎么设置
  • 原文地址:https://blog.csdn.net/m0_50207524/article/details/133046032