日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue完美實現el-table列寬自適應

瀏覽:37日期:2022-09-30 10:22:22
背景

Element UI 是 PC 端比較流行的 Vue.js UI 框架,它的組件庫基本能滿足大部分常見的業務需求。但有時候會有一些定制性比較高的需求,組件本身可能沒辦法滿足。最近在項目里就碰到了。

很多頁面都需要用到表格組件el-table。如果沒有給el-table-column指定寬度,默認情況下會平均分配給剩余的列。在列數比較多的情況,如果el-table寬度限定在容器內,單元格里的內容就會換行。強制不換行,內容要么在單元格內滾動,要么就會溢出或被截斷。

產品想要的效果是:內容保持單行顯示,列間距保持一致,表格超出容器允許水平滾動。el-table-column是支持設置固定寬度的,在內容寬度可預知的情況下,也能滿足這個需求。問題就在于如何讓列寬動態適應內容的寬度。在官方文檔也沒找到這樣的選項,應該是組件本身不支持。

技術方案

于是想到了動態計算內容寬度的方案。網上也有人提過這個思路,做法是根據內容字符數來計算寬度。這種方法有幾個局限:

內容必須是文本 不同字符寬度不一,結算結果不夠準確 需要在渲染前操作數據,不利于解耦

我采用了另一種思路,還是動態計算內容寬度,但是根據實際渲染后的 DOM 元素寬度,這樣就能解決上面三個問題。

具體怎么做呢?通過查看渲染后的 DOM 元素發現,el-table 的表頭和內容分別用了一個原生table,通過colgroup設置每列的寬度。就從這里入手,col的name屬性值和對應的 td的class值是一致的,這樣就可以遍歷對應列的所有單元格,找出寬度最大的單元格,用它的內容寬度加上一個邊距作為該列的寬度。

vue完美實現el-table列寬自適應

具體實現

怎么計算內容寬度呢?這是個比較關鍵的步驟。渲染后的每個單元格有個.cell類,用white-space: nowrap; overflow: auto;設置為不允許換行,內容超出后可滾動,同時設置display: inline-block;以便計算實際內容寬度。這樣,最終的寬度可通過.cell元素的scrollWidth屬性得到。

function adjustColumnWidth(table) { const colgroup = table.querySelector('colgroup'); const colDefs = [...colgroup.querySelectorAll('col')]; colDefs.forEach((col) => { const clsName = col.getAttribute('name'); const cells = [ ...table.querySelectorAll(`td.${clsName}`), ...table.querySelectorAll(`th.${clsName}`), ]; // 忽略加了'leave-alone'類的列 if (cells[0]?.classList?.contains?.('leave-alone')) { return; } const widthList = cells.map((el) => { return el.querySelector('.cell')?.scrollWidth || 0; }); const max = Math.max(...widthList); const padding = 32; table.querySelectorAll(`col[name=${clsName}]`).forEach((el) => { el.setAttribute('width', max + padding); }); });}

中間的探索過程比較繁瑣,但最終的代碼實現卻非常簡潔。在什么時候觸發列寬計算呢?自然是組件渲染完成后。為了方便重用,我采用了 Vue 自定義指令的方式。

Vue.directive('fit-columns', { update() {}, bind() {}, inserted(el) { setTimeout(() => { adjustColumnWidth(el); }, 300); }, componentUpdated(el) { el.classList.add('r-table'); setTimeout(() => { adjustColumnWidth(el); }, 300); }, unbind() {},});

更進一步,我封裝了一個 Vue 插件叫v-fit-columns,已經發布到 npm 倉庫,直接安裝即可使用。安裝:

npm install v-fit-columns --save

引入:

import Vue from ’vue’;import Plugin from ’v-fit-columns’;Vue.use(Plugin);

使用:

<el-table v-fit-columns> <el-table-column label='No.' type='index' class-name='leave-alone'></el-table-column> <el-table-column label='Name' prop='name'></el-table-column> <el-table-column label='Age' prop='age'></el-table-column></el-table>

源碼倉庫在這:https://github.com/kaysonli/v-fit-columns ,歡迎各位不吝賜教和 Star!

總結

這個方案多少有點 Hack 的意味,只顧實現需求,可能在其他方面還有點瑕疵,比如渲染完后會稍微閃一下(因為要重新調整寬度,會出現 reflow)。不過從最終實現的效果來看,還算令人滿意

以上就是vue完美實現el-table列寬自適應的詳細內容,更多關于vue實現el-table列寬自適應的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩成人在线看| 国产成人黄色| 日韩精品91| 国产成人精品亚洲线观看| 欧美日韩亚洲一区二区三区在线| 国产精品日韩久久久| 亚洲少妇在线| 日韩在线播放一区二区| 99香蕉国产精品偷在线观看 | 四虎成人精品一区二区免费网站 | 久久久久国产| 欧美日韩在线播放视频| 91看片一区| 激情偷拍久久| 午夜精品一区二区三区国产| 欧美日韩激情在线一区二区三区| 欧美日韩一二| 亚洲中午字幕| 婷婷精品在线| 日韩毛片网站| 欧美在线看片| 色偷偷偷在线视频播放| 欧美在线影院| 97se亚洲| 日本在线精品| 日韩精品中文字幕吗一区二区| 久久精品国产亚洲aⅴ| 久久三级视频| 欧美一区激情| 久久精品二区三区| 老司机久久99久久精品播放免费| 日韩精品一页| 久久精品在线| 日本午夜精品视频在线观看| 麻豆成人在线观看| 国产精品高颜值在线观看| 国产精品美女久久久| 欧美在线观看天堂一区二区三区| 国产美女高潮在线观看| 香蕉久久久久久久av网站| 国产精品视频3p| 欧美+亚洲+精品+三区| 久久国产免费看| 亚洲午夜电影| 久久不见久久见免费视频7| 欧美亚洲在线日韩| 精品色999| 日韩一区二区三区在线看| 91成人精品| 蜜桃精品在线| 欧美亚洲tv| 久久国产福利| 91精品国产自产在线观看永久∴| 欧美精品国产一区| 丝瓜av网站精品一区二区 | 丝袜诱惑制服诱惑色一区在线观看 | 中文在线资源| 国产精品1区| 欧美日韩午夜电影网| 亚洲人妖在线| 欧美一级专区| 亚洲国产成人精品女人| 国产一区二区三区探花| 奇米777国产一区国产二区| 婷婷精品进入| 欧美综合另类| 欧美日韩一二三四| 久久一级电影| 久久精品导航| 国产99亚洲| 一区在线视频观看| 午夜在线视频观看日韩17c| 一本一道久久a久久精品蜜桃| 久久久久久免费视频| 欧美~级网站不卡| 免费黄色成人| 亚洲精品国产嫩草在线观看| 成人福利av| 在线一区视频观看| 激情丁香综合| 欧美日韩国产一区精品一区| 国产精品视区| 蜜桃av一区二区三区电影| 免费精品国产的网站免费观看| 在线视频精品| 日本视频一区二区| 精品国产鲁一鲁****| 精品免费av在线| 美女网站久久| 国产精品a级| 日韩在线a电影| 国产欧美一区二区精品久久久| 欧美精品97| 欧美日韩国产传媒| 日日夜夜免费精品| 国产欧美一区二区三区国产幕精品| 风间由美中文字幕在线看视频国产欧美| www在线观看黄色| 亚洲我射av| 欧美国产另类| 欧美一区三区| 日韩av午夜在线观看| 国产一区二区三区亚洲| 99精品网站| 亚洲乱码久久| 精品国产欧美| 国产精品国码视频| 精品久久电影| 亚洲小说春色综合另类电影| 国产高清视频一区二区| 久久夜夜操妹子| 国产精品巨作av| 麻豆成人在线| 欧美肉体xxxx裸体137大胆| 青青草国产成人99久久| 亚洲欧美日韩高清在线| 美女视频黄久久| 日本伊人久久| 欧美中文一区二区| av中文字幕在线观看第一页| 最新国产精品视频| 欧美日韩国产高清电影| 日本不卡在线视频| 欧美成人久久| 精品欧美一区二区三区在线观看| 日韩精品视频中文字幕| 亚洲精品2区| 成人精品国产亚洲| 国产精品嫩模av在线| 国产亚洲永久域名| 麻豆成人91精品二区三区| 亚洲资源网站| 免费成人在线视频观看| 免费欧美一区| 久久三级视频| 精品九九在线| 国产激情久久| 亚洲人成亚洲精品| 视频一区视频二区中文字幕| 99精品美女| 蜜桃av.网站在线观看| 在线人成日本视频| 久久高清免费| 99精品小视频| 欧美日韩高清| 国产精品丝袜xxxxxxx| 视频一区二区不卡| 亚洲综合婷婷| 欧美一区激情| 国产日韩欧美一区二区三区在线观看| 91精品视频一区二区| 久久黄色影视| 国产精区一区二区| 老司机精品视频网| 日韩成人a**站| 九九综合九九| 日韩有吗在线观看| 久久只有精品| 99久久亚洲精品蜜臀| 国产精品毛片| 国产精品亚洲综合在线观看| 精品国产精品久久一区免费式| 久久国产欧美| 亚洲欧洲专区| 国内精品亚洲| 亚洲一区欧美二区| 国产欧美一区二区三区国产幕精品| 欧美片网站免费| 精品日韩在线| 99在线|亚洲一区二区| 国产探花在线精品一区二区| 日韩激情一区| 日本精品一区二区三区在线观看视频| 国产色噜噜噜91在线精品| 中文字幕在线看片| 日本不卡一二三区黄网| 日韩激情一区| 久久精品超碰| 亚洲欧美网站| 亚洲电影有码| 国产精品美女在线观看直播| 免费毛片在线不卡| 欧美精品影院| 男女性色大片免费观看一区二区| 欧美日韩 国产精品| 国产国产精品| 国产在线看片免费视频在线观看| 日韩国产在线观看| 午夜一级久久| 成人精品中文字幕| 麻豆国产精品视频| 久久国产视频网| 中文字幕亚洲精品乱码| 国产高清不卡| 嫩呦国产一区二区三区av| 日韩高清不卡在线| 亚洲精品系列| av一区二区高清| 亚洲成av人片一区二区密柚| 精品九九在线|