午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

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

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

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

前言

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

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

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

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

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

如果頁面有頭部信息或查詢按鈕,移動(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ù)量過多也只會(huì)在表格內(nèi)部生成滾動(dòng)條,而不是整個(gè)頁面生成滾動(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 是在哪里來的?它是自定義的指令,設(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 。頁面縮放的監(jiān)聽是使用的 element-ui 中的 resize-event ,將 addResizeListener 和 removeResizeListener 引入進(jìn)來。自定義指令要用到的鉤子函數(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)用傳遞過來的數(shù)據(jù) const { value } = binding if (!$table.height) { throw new Error(`el-$table must set the height. Such as height=’100px’`) } // 獲取距底部距離(用于展示頁碼等信息) 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)聽方法 el.resizeListener = async() => { await doResize(el, binding, vnode) }// 綁定監(jiān)聽方法到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)聽 removeResizeListener(el, el.resizeListener) }}

接下來,需要將寫好的邏輯綁定到 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

在單頁面使用

指令相關(guān)代碼已經(jīng)寫好了,接下來就是該如何使用了。找到想要設(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無具體意義,僅為初始值,不可省略 height='100px' > ... ... </table>

全局使用

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

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)文章:
主站蜘蛛池模板: 一级片在线观看免费 | 亚洲国产精品区 | 国产激情影院 | 太平公主秘史在线观看免费 | 四虎影院最新网址 | 国产91精品欧美 | 特级西西444www高清大胆 | 黄色欧美网站 | 亚洲精品久久久久久一区二区 | 国产 日韩 欧美 精品 | 亚洲欧美另类在线 | 日韩一区二区三区免费视频 | av大片在线 | 好吊色视频在线观看 | 成人在线观看一区二区 | 国产一区精品在线观看 | 亚洲第一页乱 | 麻豆视频免费看 | 人人艹视频 | 中文天堂在线资源 | 免费av网站观看 | 乳色吐息免费看 | 天天曰| 亚洲国产精品视频一区 | 四虎国产成人永久精品免费 | 视频一区二区在线播放 | 99久久精品免费 | 国产麻豆精品久久一二三 | 天堂网2020| 懂色av一区二区三区四区 | 色婷婷狠狠操 | 成人av网站在线观看 | 成人av网站大全 | www在线播放 | 天天久久久| 免费在线一级片 | 国产精品久久影院 | 超碰男人的天堂 | 亚洲五码在线观看视频 | 欧美成人a | 免费看的黄色 |