今天小編給大家分享一下vue3 table組件如何使用的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。
創(chuàng)新互聯(lián)建站是一家專業(yè)提供順平企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、H5頁(yè)面制作、小程序制作等業(yè)務(wù)。10年已為順平眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
首先開(kāi)發(fā)table組件之前,先想好要用什么樣式的api
我們期望用戶這樣使用:
依照這個(gè)寫(xiě)出以下代碼
{{col.title}} {{row[col.key]}}
最后出來(lái)的效果就是:
然后實(shí)現(xiàn)了這個(gè)后我們開(kāi)始做后面的,先從固定表頭開(kāi)始。
這里先采用第一種,以后不能滿足需求了再改成后面的方法。
效果和代碼如下:
{{col.title}} {{row[col.key]}}
可以為 Table 設(shè)置一個(gè)高度。(height)
當(dāng)數(shù)據(jù)量動(dòng)態(tài)變化時(shí),可以為 Table 設(shè)置一個(gè)最大高度。(maxHeight) 通過(guò)設(shè)置max-height屬性為 Table 指定最大高度。此時(shí)若表格所需的高度大于最大高度,則會(huì)顯示一個(gè)滾動(dòng)條。
只要在sanorin-table元素中定義了height或者maxHeight屬性,即可實(shí)現(xiàn)固定表頭的表格,而不需要額外的代碼。
代碼如下:
{{col.title}} {{row[col.key]}}
接下來(lái)加入寬度控制,希望在columns 傳入的數(shù)組對(duì)象內(nèi)加入寬度,示例如下:
const columnsList = [ { title: '書(shū)名', key: 'name', width: 100, }, { title: '作者', key: 'author', width: 100, }, { title: '價(jià)格', key: 'price', width: 100, }, { title: '簡(jiǎn)介', key: 'desc', minWidth: 350, } ]
希望達(dá)到以下效果
1、含有width的列,寬度固定,不隨瀏覽器寬度變化而變化
2、含有minWidth的列,在大于設(shè)定值時(shí),自動(dòng)填充 table 剩余寬度,小于設(shè)定值時(shí),固定該寬度
3、不包含width和minWidth的列,自動(dòng)填充 table 剩余寬度
根據(jù)我們的需求,我們需要單獨(dú)控制每一列的寬度展示,并在瀏覽器寬度變化時(shí)實(shí)時(shí)的重新計(jì)算并且重新渲染列。
首先定義出一個(gè)方法,用來(lái)計(jì)算每一列在當(dāng)前情況下所要的寬度,再綁定要dom上。然后,每次表格變化/瀏覽器寬度變化時(shí)候就能實(shí)時(shí)響應(yīng)改變Table的寬度了。
const initColumns = () => { // 計(jì)算每一列在當(dāng)前情況下所要的寬度 } watch(() => props.columns, () => { initColumns() }); onMounted(() => { nextTick(() => { initColumns(); on(window, 'resize', throttle(() => initColumns(), 400)); }); }); onBeforeUnmount(() => off(window, 'resize', () => initColumns()));
全部代碼:
{{col.title}} {{row[col.key]}}
其中用到的兩個(gè)js,防抖節(jié)流和注冊(cè)監(jiān)聽(tīng)這里也放下吧
/* 防抖節(jié)流函數(shù) */ let timeout = null // 創(chuàng)建一個(gè)標(biāo)記用來(lái)存放定時(shí)器的返回值 let count = 0; export function debounce(fn, wait = 1000, immediate = false) { return function () { const args = arguments; if (immediate) { if (count == 0) { fn.apply(this, arguments) count++; } else { if (timeout) { clearTimeout(timeout) // 每當(dāng)用戶輸入的時(shí)候把前一個(gè) setTimeout clear 掉 } timeout = setTimeout(() => { fn.apply(this, arguments) }, wait) } } else { if (timeout) { clearTimeout(timeout) // 每當(dāng)用戶輸入的時(shí)候把前一個(gè) setTimeout clear 掉 } timeout = setTimeout(() => { fn.apply(this, arguments) }, wait) } }() } let canRun = true; let count1 = 0; export function throttle(fn, wait = 1000, immediate = true) { return function () { if (immediate) { if (count1 == 0) { fn.apply(this, arguments); count1++; } else { if (canRun) { canRun = false setTimeout(function () { fn.apply(this, arguments) canRun = true }, wait); } } } else { if (!canRun) return canRun = false setTimeout(function () { fn.apply(this, arguments) canRun = true }, wait); } }() }
/** * 綁定事件 on(element, event, handler) */ export const on = (element, event, handler) => { if (document.addEventListener) { if (element && event && handler) { element.addEventListener(event, handler, false) } } } /** * 解綁事件 off(element, event, handler) */ export const off = (element, event, handler) => { if (document.removeEventListener) { if (element && event) { element.removeEventListener(event, handler, false) } } }
以上就是“vue3 table組件如何使用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。