element?ui設(shè)置table自適應(yīng)表格寬,不自動換行問題
element ui設(shè)置table自適應(yīng)表格寬,不自動換行
在我們平常開發(fā)使用element ui中的table時,會出現(xiàn)數(shù)據(jù)過長自動換行的結(jié)果,
如果把寬給死的情況下也不太適合,接下來提供二種方式去動態(tài)計算每個盒子的寬度。

第一種方式
- 表格加** table-layout='auto’ **屬性
- 表格加tableAuto類名
- el-table-column標(biāo)簽不設(shè)置寬度
<el-table :data="tableData" table-layout='auto' class="tableAuto">
<el-table-column prop="name" label="名稱" />
</el-table>
// 設(shè)置超出不折行
<style>
.tableAuto.el-table .cell {
white-space: nowrap;
}
</style>
但這種方式純在二個問題
1.el-table-column左側(cè)多個列加fixed屬性,左右滑動,列寬得提前計算
2.el-table設(shè)置table-layout='auto’ 與 固定表頭 的功能沖突,表頭無法再固定
第二種方式 (推薦使用第二種方式)
第二種方式就是通過canvas動態(tài)計算el-table-column寬度,可以完美解決第一種方式的2中弊端。
<template>
<el-table>
<el-table-column :width="flexWidth(item.en, tableData, item.cn)"></el-table-column>
</el-table>
</temolate>
<script>
/**
* dynamicCalculationWidth
* @param string | number prop 每列的prop 可傳''
* @param array tableData 表格數(shù)據(jù)
* @param string | number title 標(biāo)題長內(nèi)容短的,傳標(biāo)題 可不傳
* @param number num 列中有標(biāo)簽等加的富余量
* @returns 每列的寬度
* 注:prop,title有一個必傳
*/
dynamicCalculationWidth(prop, tableData, title, num = 0) {
if (tableData.length === 0) {
// 表格沒數(shù)據(jù)不做處理
return
}
let flexWidth = 0 // 初始化表格列寬
let columnContent = '' // 占位最寬的內(nèi)容
let canvas = document.createElement('canvas')
let context = canvas.getContext('2d')
context.font = '14px Microsoft YaHei'
if (prop === '' && title) {
// 標(biāo)題長內(nèi)容少的,取標(biāo)題的值,
columnContent = title
} else {
// 獲取該列中占位最寬的內(nèi)容
let index = 0
for (let i = 0; i < tableData.length; i++) {
const now_temp = tableData[i][prop] + ''
const max_temp = tableData[index][prop] + ''
const now_temp_w = context.measureText(now_temp).width
const max_temp_w = context.measureText(max_temp).width
if (now_temp_w > max_temp_w) {
index = i
}
}
columnContent = tableData[index][prop]
// 比較占位最寬的值跟標(biāo)題、標(biāo)題為空的留出四個位置
const column_w = context.measureText(columnContent).width
const title_w = context.measureText(title).width
if (column_w < title_w) {
columnContent = title || '占位符呀'
}
}
// 計算最寬內(nèi)容的列寬
let width = context.measureText(columnContent)
flexWidth = width.width + 40 + num
return flexWidth + 'px'
},
</script>
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue子組件改變父組件傳遞的prop值通過sync實現(xiàn)數(shù)據(jù)雙向綁定(DEMO)
本文通過一個demo給大家介紹了vue子組件改變父組件傳遞的prop值通過sync實現(xiàn)數(shù)據(jù)雙向綁定,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02
Vue.js獲取被選擇的option的value和text值方法
今天小編就為大家分享一篇Vue.js獲取被選擇的option的value和text值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
Vue結(jié)合Element-Plus封裝遞歸組件實現(xiàn)目錄示例
本文主要介紹了Vue結(jié)合Element-Plus封裝遞歸組件實現(xiàn)目錄示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04

