Vue動態(tài)設(shè)置el-table操作列的寬度自適應(yīng)
一、問題
用el-table組件開發(fā)時,對于表格的操作列的自適應(yīng)寬度是一個問題,如果不設(shè)置,操作按鈕多時會有換行問題。如果設(shè)置最小寬度或?qū)挾葧r,又會出現(xiàn)當(dāng)條件不滿足時,按鈕顯示的少,但操作列的寬度太寬,顯示多余的空白。尤其對于字段較多,操作列固定情況下,現(xiàn)得特別浪費空間。
寬度不足情況
寬度充足但條件不足情況
期望情況
操作列可以根據(jù)按鈕情況自適應(yīng)寬度,按鈕少時寬度變小,按鈕多時自動增加寬度。
二、解決方案
網(wǎng)上查了一下對列內(nèi)容的自適應(yīng)的方案較多,但對操作列的自適應(yīng)卻沒有找到相關(guān)的方案。不過按照內(nèi)容自適應(yīng)的方案的原理,本人實現(xiàn)了一下,發(fā)現(xiàn)可以解決。
思路
通過CSS的 white-space: nowrap; display: inline-block
設(shè)置內(nèi)容不換行,然后計算div的寬度來重新設(shè)置列頭屬性,
依賴屬性:
- CSS:
white-space: nowrap; display: inline-block
- Table-column Attributes:
render-header:列標題 Label 區(qū)域渲染使用的 Function
代碼示例
<template> <div> <el-table :data="tableData" style="width: 100%" :border="true" fit> <el-table-column type="index" width="50" label="No" fixed> </el-table-column> <el-table-column prop="date" label="日期" width="150" fixed> </el-table-column> <el-table-column prop="name" label="姓名" width="120"> </el-table-column> <el-table-column prop="province" label="省份" width="120"> </el-table-column> <el-table-column prop="address" label="地址" minWidth="260"> </el-table-column> <el-table-column prop="zip" label="郵編" minWidth="120"> </el-table-column> <el-table-column label="操作" fixed="right" :render-header="renderHeader"> <template slot-scope="scope"> <div class="optionDiv" style="white-space: nowrap; display: inline-block"> <el-button type="text" size="small"> 新增 </el-button> <el-button type="text" size="small"> 編輯 </el-button> <el-button v-if="scope.row.type == 2 || scope.row.type == 3" type="text" size="small"> 移除 </el-button> <el-button v-if="scope.row.type == 2 || scope.row.type == 3" type="text" size="small"> 詳情 </el-button> <el-button v-if="scope.row.type == 3 || scope.row.type == 3" type="text" size="small"> 下發(fā) </el-button> </div> </template> </el-table-column> </el-table> </div> </template> <script> export default { data() { return { tableData: [ { date: '2016-05-03', name: '王小虎', province: '上海', address: '上海市普陀區(qū)金沙江路 1518 弄', zip: 200333, type: 1 }, { date: '2016-05-02', name: '王小虎', province: '上海', address: '上海市普陀區(qū)金沙江路 1518 弄', zip: 200333, type: 2 }, { date: '2016-05-02', name: '王小虎', province: '上海', address: '上海市普陀區(qū)金沙江路 1518 弄', zip: 200333, type: 3 } ] }; }, methods: { // 表頭部重新渲染 renderHeader(h, { column, $index }) { // 獲取操作按鈕組的元素 const opts = document.getElementsByClassName('optionDiv'); let widthArr = []; // 取操作組的最大寬度 Array.prototype.forEach.call(opts, function (item) { if (item.innerText) { widthArr.push(item.offsetWidth); } }); // 重新設(shè)置列標題及寬度屬性 if (widthArr.length > 0) { column.width = Math.max(...widthArr) + 24; return h('span', column.label); } else { column.width = 0; return h('span', column.label); } } } }; </script>
最終效果
分別為兩列、三列和四列操作的展示效果
總結(jié)
到此這篇關(guān)于Vue動態(tài)設(shè)置el-table操作列的寬度自適應(yīng)的文章就介紹到這了,更多相關(guān)el-table列寬度自適應(yīng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue3中el-table表格數(shù)據(jù)不顯示的原因和解決方法
- vue?el-table實現(xiàn)動態(tài)添加行和列具體代碼
- Vue+EleMentUI實現(xiàn)el-table-colum表格select下拉框可編輯功能實例
- vue element-ui實現(xiàn)el-table表格多選以及回顯方式
- vue中el-table合并列的具體實現(xiàn)
- Vue element el-table-column中對日期進行格式化方式(全局過濾器)
- Vue中如何合并el-table第一列相同數(shù)據(jù)
- vue element-ui el-table組件自定義合計(summary-method)的坑
- el-table 選擇框根據(jù)條件設(shè)置某項不可選中的操作代碼
相關(guān)文章
vue3使用xgPalyer實現(xiàn)截圖功能的方法詳解
這篇文章主要為大家詳細介紹了如何在vue3中使用xgPalyer截圖功能,以及自定義插件,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02vue3?process.env.XXX環(huán)境變量不生效的解決方法
這篇文章主要給大家介紹了關(guān)于vue3?process.env.XXX環(huán)境變量不生效的解決方法,通過文中介紹的方法可以很方便的解決遇到的問題,對大家學(xué)習(xí)或者使用vue3具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08從0搭建Vue3組件庫如何使用?glup?打包組件庫并實現(xiàn)按需加載
這篇文章主要介紹了從0搭建Vue3組件庫如何使用?glup?打包組件庫并實現(xiàn)按需加載,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03vue?動態(tài)添加el-input的實現(xiàn)邏輯
這篇文章主要介紹了vue?動態(tài)添加el-input的實現(xiàn)代碼,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06