Vue怎么實(shí)現(xiàn)自適應(yīng)高度表格-創(chuàng)新互聯(lián)

這篇文章主要講解了Vue怎么實(shí)現(xiàn)自適應(yīng)高度表格,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。

成都創(chuàng)新互聯(lián)公司專注于玄武企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城網(wǎng)站制作。玄武網(wǎng)站建設(shè)公司,為玄武等地區(qū)提供建站服務(wù)。全流程按需定制制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

前言

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

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

本人是做后臺(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怎么實(shí)現(xiàn)自適應(yīng)高度表格

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

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

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

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

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

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

想要滿足上述條件就需要使用 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 ,將 addResizeListenerremoveResizeListener 引入進(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怎么實(shí)現(xiàn)自適應(yīng)高度表格-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://muchs.cn/article30/dhejso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、微信公眾號(hào)ChatGPT、定制網(wǎng)站App開發(fā)、網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)