色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Vue 自適應(yīng)高度表格的實(shí)現(xiàn)方法

瀏覽:24日期:2023-01-21 09:44:55

前言

示例版本為 Element-ui 2.13.1 + Vue 2.6.11

Vue 自適應(yīng)高度表格的實(shí)現(xiàn)方法

本人是做后臺(tái)開(kāi)發(fā)的,由于公司業(yè)務(wù)要求需要將前后臺(tái)模塊進(jìn)行分離,兩年前選擇使用vue-element-admin 項(xiàng)目進(jìn)行前臺(tái)的開(kāi)發(fā),該框架集成了很多功能,特別適合對(duì) Vue 很陌生的新手,公司項(xiàng)目組成員接受程度普遍較高。

在使用過(guò)程中 表格 是必不可少的一個(gè)控件,用于展示數(shù)據(jù),單頁(yè)數(shù)據(jù)量過(guò)多就會(huì)導(dǎo)致瀏覽器自動(dòng)生成右側(cè)滾動(dòng)條。

Vue 自適應(yīng)高度表格的實(shí)現(xiàn)方法

如果頁(yè)面有頭部信息或查詢按鈕,移動(dòng)滾動(dòng)條后會(huì)遮擋住這些操作和信息內(nèi)容。

Vue 自適應(yīng)高度表格的實(shí)現(xiàn)方法

Element-UI 中的 el-table 提供了設(shè)置高度的選項(xiàng),在代碼中設(shè)置 height 屬性就可以現(xiàn)在表格的高度,數(shù)據(jù)量過(guò)多也只會(huì)在表格內(nèi)部生成滾動(dòng)條,而不是整個(gè)頁(yè)面生成滾動(dòng)條。

Vue 自適應(yīng)高度表格的實(shí)現(xiàn)方法

但是這個(gè)高度需要固定的數(shù)值,不同的分辨率或者縮放后的瀏覽器使用固定高度后,不能滿足只在 el-table 內(nèi)部生成滾動(dòng)條的條件。

Vue 自適應(yīng)高度表格的實(shí)現(xiàn)方法

想要滿足上述條件就需要使用 v-adaptive 指令了。

Vue 自定義指令

你可能會(huì)好奇 v-adaptive 是在哪里來(lái)的?它是自定義的指令,設(shè)置表格高度需要對(duì)普通 DOM 元素進(jìn)行底層操作。Vue 除了核心功能默認(rèn)內(nèi)置的指令 ( v-model 和 v-show ),也允許注冊(cè)自定義指令,相關(guān) Api 可以查看 官方文檔 。

v-adaptive

新建包名 src/directive/el-table ,創(chuàng)建 adaptive.js 。頁(yè)面縮放的監(jiān)聽(tīng)是使用的 element-ui 中的 resize-event ,將 addResizeListener 和 removeResizeListener 引入進(jìn)來(lái)。自定義指令要用到的鉤子函數(shù):

bind:只調(diào)用一次,指令第一次綁定到元素時(shí)調(diào)用。在這里可以進(jìn)行一次性的初始化設(shè)置。 inserted:被綁定元素插入父節(jié)點(diǎn)時(shí)調(diào)用 (僅保證父節(jié)點(diǎn)存在,但不一定已被插入文檔中)。 unbind:只調(diào)用一次,指令與元素解綁時(shí)調(diào)用。

import { addResizeListener, removeResizeListener } from ’element-ui/src/utils/resize-event’ // 設(shè)置表格高度 const doResize = async(el, binding, vnode) => { // 獲取表格Dom對(duì)象 const { componentInstance: $table } = await vnode // 獲取調(diào)用傳遞過(guò)來(lái)的數(shù)據(jù) const { value } = binding if (!$table.height) { throw new Error(`el-$table must set the height. Such as height=’100px’`) } // 獲取距底部距離(用于展示頁(yè)碼等信息) const bottomOffset = (value && value.bottomOffset) || 30 if (!$table) return // 計(jì)算列表高度并設(shè)置 const height = window.innerHeight - el.getBoundingClientRect().top - bottomOffset $table.layout.setHeight(height) $table.doLayout()}export default { // 初始化設(shè)置 bind(el, binding, vnode) { // 設(shè)置resize監(jiān)聽(tīng)方法 el.resizeListener = async() => { await doResize(el, binding, vnode) }// 綁定監(jiān)聽(tīng)方法到addResizeListener addResizeListener(window.document.body, el.resizeListener) }, // 綁定默認(rèn)高度 async inserted(el, binding, vnode) { await doResize(el, binding, vnode) }, // 銷毀時(shí)設(shè)置 unbind(el) { // 移除resize監(jiān)聽(tīng) removeResizeListener(el, el.resizeListener) }}

接下來(lái),需要將寫(xiě)好的邏輯綁定到 Vue 中,在同一目錄下新建 index.js :

import adaptive from ’./adaptive’const install = function(Vue) { // 綁定v-adaptive指令 Vue.directive(’adaptive’, adaptive)}if (window.Vue) { window[’adaptive’] = adaptive // eslint-disable-next-line no-undef Vue.use(install)}adaptive.install = installexport default adaptive

在單頁(yè)面使用

指令相關(guān)代碼已經(jīng)寫(xiě)好了,接下來(lái)就是該如何使用了。找到想要設(shè)置表格自適應(yīng)高度的 vue 文件,在 script 標(biāo)簽下引入自定義的指令并綁定。

import adaptive from ’@/directive/el-table’export default { name:’Test’, directives: { adaptive }, ... ...}

然后找到表格所在的標(biāo)簽添加指令相關(guān)的代碼:

<el-table ref='table' // 自定義指令,bottomOffset 代表距離底部的距離 v-adaptive='{bottomOffset: 85}' // 高度屬性,100無(wú)具體意義,僅為初始值,不可省略 height='100px' > ... ... </table>

全局使用

如果存在多個(gè)頁(yè)面需要設(shè)置自適應(yīng)高度,為了減少使用指令的復(fù)雜度,我們可以在 main.js 中全局引入自定義的指令,上述 script 的內(nèi)容就不需要在每個(gè)頁(yè)面進(jìn)行寫(xiě)入了。

import adaptive from ’./directive/el-table’Vue.use(adaptive)

結(jié)尾

源碼放在 GitHub 上了,希望可以幫助到你。

到此這篇關(guān)于Vue 自適應(yīng)高度表格的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Vue 自適應(yīng)高度表格內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 一区二区三区中文字幕 | 国产日韩欧美视频在线 | 亚洲精品欧美日韩 | 国产精品视_精品国产免费 国产精品视频久 | 欧美极品video粗暴 | 在线综合+亚洲+欧美中文字幕 | 亚洲gogo人体大胆西西安徽 | 一本色道久久综合狠狠躁 | 午夜a一级毛片一.成 | 偷拍视频一区在线观看 | 91九色成人 | 美女被cao免费看在线看网站 | 手机看片自拍日韩日韩高清 | 普通话对白国产精品一级毛片 | 久久国产精品久久久久久 | 亚洲精品一区二区在线播放 | 色综合a| 国产天堂在线一区二区三区 | 久久精品18 | 一区二区在线播放福利视频 | 欧美私人网站 | 国产成人亚洲综合 | 日韩一级不卡 | 九九九九精品视频在线播放 | 欧美性色高清生活片 | 久久精品国产欧美 | 日本三级精品 | www.亚色| 深爱五月开心网亚洲综合 | 国产精品亚洲午夜不卡 | 久久99精品久久久久久野外 | 成人午夜两性视频免费看 | 久久综合本色宗合一本色 | 久久精品视频在线播放 | 国产三级午夜理伦三级 | 国产aaa级一级毛片 国产aaa毛片 | 国产午夜毛片v一区二区三区 | 高清国产美女一级a毛片录 高清国产亚洲va精品 | 国产在线观看成人 | 直接看的毛片 | 久久视频精品53在线观看 |