由于表头和列是分开渲染的,通过el-table 设置fit属性,只能撑开表头,但是没有办法根据列的内容去适应宽度。网上找了一些使用根据表格内容计算表头宽度的文章,记个笔记。
代码逻辑是通过vue 的watch 监控表格的数据data,计算每列的内容和表头的最大宽度,计算的时候把表格内容使用span标签包裹,然后计算span标签的宽度width:px,然后再加上表格的内边距,
就得到了列的最大宽度.
<el-table :key="key" :data="data" v-loading="loading" style="width: 100%;" >
<el-table-column v-for="fruit in formThead"
:key="fruit.prop"
:label="fruit.label"
:width="fruit.width" <!-- 设置宽度 -->
show-overflow-tooltip>
<template slot-scope="scope">
{{ scope.row[fruit.prop] }}
</template>
</el-table-column>
</el-table>
<script>
const fields = [
{label:"ID", prop:"id"},
{label:"资产名称", prop:"asset_name"},
{label:"OA工单号", prop:"oa_jon_num"},
{label:"IP", prop:"ipaddress"},
{label:"SN号", prop:"sn"},
{label:"CPU(核)", prop:"cpu"},
{label:"内存(G)", prop:"memory"},
{label:"存储(G)", prop:"disk"},
{label:"资产类型", prop:"device_type_name"},
{label:"资产状态", prop:"device_status_name"},
{label:"所属环境", prop:"device_env_type_name"},
{label:"房间", prop:"root"},
{label:"设备用途", prop:"purpose"},
{label:"机架位", prop:"rack_position"},
{label:"U位", prop:"u_position"},
{label:"所属IDC机房", prop:"idc_name"},
{label:"设备型号", prop:"equipment_type"},
{label:"采购日期", prop:"purchase_date"},
{label:"所属系统类别", prop:"sys_name"},
{label:"所属二级产品线", prop:"second_name"},
{label:"所属物理机", prop:"parent_asset_name"},
{label:"创建时间", prop:"create_at"}
]
export default {
data() {
return {
url: "asset",
key: 1, // table key
formThead: fields, // 默认表头 Default header
data: []
};
},
methods: {
/**
* 遍历列的所有内容,获取最宽一列的宽度
* @param arr
*/
getMaxLength (arr) {
return arr.reduce((acc, item) => {
if (item) {
let calcLen = this.getTextWidth(item)
if (acc < calcLen) {
acc = calcLen
}
}
return acc
}, 0)
},
/**
* 使用span标签包裹内容,然后计算span的宽度 width: px
* @param valArr
*/
getTextWidth(str) {
let width = 0;
let html = document.createElement('span');
html.innerText = str;
html.className = 'getTextWidth';
document.querySelector('body').appendChild(html);
width = document.querySelector('.getTextWidth').offsetWidth;
document.querySelector('.getTextWidth').remove();
return width;
}
},
watch: {
/**
* 监控表格的数据data,自动设置表格宽度
* @param valArr
*/
data(valArr) {
const _this = this
this.formThead = fields.map(function (value) {
const arr = valArr.map(x => x[value.prop]) // 获取每一列的所有数据
arr.push(value.label) // 把每列的表头也加进去算
value.width = _this.getMaxLength(arr) + 20 // 每列内容最大的宽度 + 表格的内间距(依据实际情况而定)
return value
})
}
}
}
</script>
https://www.cnblogs.com/huangxiaoxue/p/12034326.html
分享到:
相关推荐
【vue+el-table】表格操作列宽度跟随按钮个数自适应, 方法封装全局使用demo, 开箱即用 【vue+el-table】表格操作列宽度跟随按钮个数自适应, 方法封装全局使用demo, 开箱即用 【vue+el-table】表格操作列宽度跟随按钮...
为了实现自适应高度,你需要在el-table元素上定义height属性。例如: ```html <el-table :data="tableData" height="250" border style="width:100%"> <!-- 列定义 --> </el-table> ``` 在这个例子中,`...
`:width`的值来自`tableColumn`对象,通过`tableColumn['tab-table-1'][索引]`获取,这里的`'tab-table-1'`是表格ID,索引对应于`el-table-column`在`tableColumn`数组中的位置。 在`mounted`生命周期钩子中,`...
本项目"基于ElementUI二次封装的支持自适应列宽的table-column列组件"正是针对Element-UI的table组件进行了一次深度定制,以解决在数据展示过程中列宽自动适应的问题。 Element-UI的table组件在默认情况下,列宽...
在这个项目"vue-dynamic-table.rar"中,我们将探讨如何使用Vue和ElementUI来实现列可变的动态表格。 首先,动态表格的核心在于根据后端返回的数据结构来动态生成表格的列。在传统的静态表格中,列的数量和类型在...
总结来说,这个解决方案通过自定义Vue指令实现了`el-table`的列宽自适应,根据单元格内容动态计算宽度,有效地解决了表头错位和固定列错位的问题。使用时只需在`el-table`标签上添加`v-tableFit`指令,即可自动调整...
可以让你不需要大量使用百分比或者转换之类的方法去写屏幕自适应大小,而是可以用部分px直接写css定死,通过屏幕大小改变对应等比例缩放,达到屏幕适配效果 为了让大家直观的看到所有的代码,所以结构方法等就不分...
通过在vue中使用element的table表格,实现数据动态渲染,并且动态渲染表头。通过在父组件中引入子组件表格,然后向子组件传递表格数据和表头数据。 子组件table中template模板 <el-table :data="this.table...
Element UI 是一个基于 Vue 的组件库,它包含了许多实用的UI组件,如表格(el-table),方便开发者快速构建企业级后台界面。 当表格数据量较大时,浏览器通常会显示右侧滚动条,这可能导致页面上的头部信息或查询...
在Vue.js应用中,开发一个具有滚动功能的表格并保持表头与列对齐是一项常见的需求。当表格列的宽度不同时,这个问题变得更加复杂。本文将详细介绍如何在Vue中实现这个功能,主要涉及以下几个关键点: 1. **监听滚动...
改变table的列宽度,可以拖拽的td表格,表格内文字只显示一行,超过的部分自动隐藏
1、echarts图表的类型是动态的,类型用柱状图展示,合计用折现图展示。2、下面表格对应的月份跟类型是动态的,从后台数据库获取,当查询条件只展示7个月的...4、监听左侧菜单栏是否展开,解决菜单展开关闭时图表自适应
最近做的一个项目是基于 vue + AntDesign 的。由于项目要求,需要在 Table 组件的行内点右键的时候弹出菜单。在线演示地址及最终效果图如下: 在线演示地址>> 首先新建一个Table组件的实例: <a> { return ...
vue-echarts-element-stylus 一. 高度封装的elemnet表格组件: (0)表头通过参数通过json遍历 (1)自定义渲染表头,排序,提示tips。 (2)高度封装el-table-column,可自定义列数据,一列展示多个数据 (3)固定...
const tableEl = el.querySelector('.el-table'); const parentEl = el.parentElement; // 初始化高度 let initialHeight = parentEl.clientHeight; tableEl.style.height = initialHeight + 'px'; // ...
Element UI 提供了一个强大的表格组件 `el-table`,它允许我们自定义列的显示方式,包括对时间数据进行格式化。本文将详细介绍如何在Element UI的表格中对时间数据进行格式化。 首先,我们需要在表格的列定义中添加...
3.在开发的过程中,我们经常会使用到 element中的table,但是我们也发现了在table的配置中,只能设置 具体的高度不能设置百分比,怎么实现table高度自适应呢?方法如下: 4.在对应的vue模板中添加如下代码: <el data=...
ps:这个问题fly社区给出的解释是:table 列宽自适应出现横向滚动条的几率一般是比较小的,主要原因是 table 的渲染有时会在浏览器纵向滚动条出现之前渲染完毕,这时 table 容器会被强制减少滚动条宽度的差(一般是 ...