Vue2+Element-ui實現(xiàn)el-table表格自適應(yīng)高度的案例
效果圖
新建指令
Vue.directive('height', { inserted(el, _binding, vnode) { const paginationRef = vnode.context.$refs.paginationRef const calculateHeight = () => { const windowHeight = window.innerHeight const topOffset = el.getBoundingClientRect().top const otherElementsHeight = 40 let paginationHeight = 0 if (paginationRef && paginationRef.totalPage) { paginationHeight = 55 } el.style.height = `${ windowHeight - topOffset - otherElementsHeight - paginationHeight }px` } const debouncedCalculateHeight = _.debounce(calculateHeight, 500) debouncedCalculateHeight() window.addEventListener('resize', debouncedCalculateHeight) el.__vueHeightDirective__ = debouncedCalculateHeight }, unbind(el) { window.removeEventListener('resize', el.__vueHeightDirective__) delete el.__vueHeightDirective__ } })
頁面使用
1:el-table外層嵌套div,加指令v-height
2:el-table設(shè)置height=100%
<div v-height> <el-table height="100%"> </el-table-column> </el-table> </div>
注意,重點!
1:指令這一行 const paginationRef = vnode.context.$refs.paginationRef
用來判斷是否顯示分頁器,所以如果有分頁器需要在分頁器增加ref,如下:
<el-pagination ref="paginationRef"> </el-pagination>
2:至于這一行 paginationRef.totalPage,是分頁器的顯示與否,比如:
<el-pagination v-if="total > 0" ref="paginationRef"> </el-pagination>
至于我這里為什么叫totalPage,因為這個是經(jīng)過二次封裝的,沒封裝的就直接叫total。
同理 指令paginationRef.totalPage需要修改為paginationRef.total
3:有人問了paginationRef.total這個total是怎么來的,怎么命名的;
這個是官網(wǎng)的文檔的組件,paginationRef這里就會獲取你分頁器的props。
比如:
這個total就指的elementUI的分頁組件的props。一般因為是用來判斷total數(shù)量是不是大于0顯示;
大于0就顯示了分頁器,所以。。。懂了吧
4:又有人問了,為什么指令不直接寫在el-table里。這個你可以自己去試試,會發(fā)現(xiàn)滾動不了。
至于原因:因為這個指令設(shè)置的是單獨style的height高度,你審查元素就會發(fā)現(xiàn)el-table傳參的height 他需要同步設(shè)置為他下級元素樣式el-table__body-wrapper的高度,所以并不是設(shè)置style為height的高度這么簡單。
5:代碼的_.debounce是什么。這里是用的lodash的防抖函數(shù),自己寫一個防抖函數(shù)即可。
6:有的同學(xué)就要問了,那我直接封裝一個方法或者其他方法或者mixins來計算行不行
都可以,你想怎么用怎么用,mixins的話比如:
export default { data() { return { tableHeight: 0 } }, mounted() { this.calculateAndSetHeight() }, methods: { calculateAndSetHeight() { if (this.$refs.tableRef) { const el = this.$refs.tableRef.$el const calculateHeight = () => { const windowHeight = window.innerHeight const topOffset = el.getBoundingClientRect().top const otherElementsHeight = 40 let paginationHeight = 0 const paginationRef = this.$refs.paginationRef if (paginationRef && paginationRef.totalPage) { paginationHeight = 55 } this.tableHeight = `${ windowHeight - topOffset - otherElementsHeight - paginationHeight }px` } const throttledCalculateHeight = _.debounce(calculateHeight, 500) throttledCalculateHeight() window.addEventListener('resize', throttledCalculateHeight) // 在組件銷毀時移除事件監(jiān)聽器 this.$once('hook:destroyed', () => { window.removeEventListener('resize', throttledCalculateHeight) }) } } } }
頁面使用:
<el-table ref="tableRef" :height="tableHeight">
這樣就不用一個個標(biāo)簽像v-height div包起來了,但是ref和height就必要。
效果都是一樣的,自己看著來。
ps:至于為什么要寫這個功能,你能點進來看說明就是公司有一些犟貨 覺得滾下去太麻煩了?;蛘呤求w驗不是很好的,數(shù)據(jù)太多屏幕太小總要滾下去。
另外其實后臺系統(tǒng)大部分用模板即可,有些模板自帶有這種功能。
到此這篇關(guān)于Vue2+Element-ui實現(xiàn)el-table表格自適應(yīng)高度的文章就介紹到這了,更多相關(guān)Vue2 Element-ui表格自適應(yīng)高度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue前端獲取不同客戶端mac地址最詳細(xì)步驟(避免踩坑)
在開發(fā)過程中,綁定賬號和電腦的功能可以通過獲取電腦的MAC地址實現(xiàn),下面這篇文章主要介紹了vue前端獲取不同客戶端mac地址的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10Vue3中使用Element-Plus的el-upload組件限制只上傳一個文件的功能實現(xiàn)
在 Vue 3 中使用 Element-Plus 的 el-upload 組件進行文件上傳時,有時候需要限制只能上傳一個文件,本文將介紹如何通過配置 el-upload 組件實現(xiàn)這個功能,讓你的文件上傳變得更加簡潔和易用,需要的朋友可以參考下2023-10-10ElementUI 詳細(xì)分析DatePicker 日期選擇器實戰(zhàn)
這篇文章主要介紹了ElementUI詳細(xì)分析DatePicker 日期選擇器實戰(zhàn)教程,本文通過實例代碼圖文介紹給大家講解的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08Vue Element前端應(yīng)用開發(fā)之組織機構(gòu)和角色管理
本篇文章繼續(xù)深化Vue Element權(quán)限管理模塊管理的內(nèi)容,介紹組織機構(gòu)和角色管理模塊的處理,使得我們了解界面組件化模塊的開發(fā)思路和做法,提高我們界面設(shè)計的技巧,并減少代碼的復(fù)雜性,提高界面代碼的可讀性,同時也是利用組件的復(fù)用管理。2021-05-05vue前端實現(xiàn)dhtmlxgantt甘特圖代碼示例(個人需求)
這篇文章主要介紹了如何使用dhtmlx-gantt和chinese-days插件在項目中實現(xiàn)節(jié)假日置灰顯示的功能,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03關(guān)于element-ui表單中限制輸入純數(shù)字的解決方式
這篇文章主要介紹了關(guān)于element-ui表單中限制輸入純數(shù)字的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09Vue3造輪子之Typescript配置highlight過程
這篇文章主要介紹了Vue3造輪子之Typescript配置highlight過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07