ant design vue中table表格滾動加載實現(xiàn)思路
在ant design vue組件庫中,并沒有提供可以直接監(jiān)聽table滾動的api,在此我使用了原生js去對table表格賦予一個監(jiān)聽表格滾動事件。
在處理一寫數(shù)據(jù)量特別大的情況下,我們不能把后端的數(shù)據(jù)一次性全部拿到前端在table表格中展示,為了考慮性能優(yōu)化,使用了滾動加載表格數(shù)據(jù)。做這個功能之前,我們首先需要獲取到table滾動到底部或者頂部時去觸發(fā)方法。
首先我想要對表格進(jìn)行滾動加載,接口需要我傳遞的數(shù)據(jù)為行數(shù),傳遞了行數(shù)來規(guī)定從第幾行開始返回部分?jǐn)?shù)據(jù),具體返回數(shù)據(jù)的條數(shù)需要根據(jù)接口來定。
在此功能中,我每次需要獲取100條數(shù)據(jù),我想要每次table表格滾動到底部的時候,獲取接下來的100條,或者滾動到頂部時獲取上面的100條數(shù)據(jù),但是大家也可以根據(jù)自己的需求來去傳遞想要的條數(shù)。
table表格:
<a-table ref="myTable" size="middle" :columns="columns" :data-source="dataSource" :pagination="false" :scroll="{ y: 'calc(100vh - 160px)' }" :loading="loading"> </a-table>
賦予表格滾動事件:
- 使用
ref
來獲取到table表格 - 當(dāng)表格存在時,再去對表格進(jìn)行操作,否則可能導(dǎo)致獲取不到而報錯
- 使用
tableComponent.$el.querySelector('.ant-table-body')
來獲取表格組件內(nèi)部具有類名ant-table-body
的容器元素。這個容器通常用于包裹表格的內(nèi)容,并且可能具有滾動條 - 給表格添加一個滾動事件監(jiān)聽器,當(dāng)表格容器發(fā)生滾動時,就會調(diào)用
handleScroll
方法
mounted() { this.$nextTick(() => { const tableComponent = this.$refs.myTable; if (tableComponent) { const tableContainer = tableComponent.$el.querySelector('.ant-table-body'); tableContainer.addEventListener('scroll', this.handleScroll); } }) },
在給表格添加滾動事件監(jiān)聽的時候,同時要在頁面的銷毀鉤子函數(shù)中移除對
table
添加的事件監(jiān)聽,以免會出現(xiàn)不必要的錯誤,保證代碼的穩(wěn)定性。
beforeUnmount() { this.$nextTick(() => { const tableComponent = this.$refs.myTable; if (tableComponent) { const tableContainer = tableComponent.$el.querySelector('.ant-table-body'); tableContainer.removeEventListener('scroll', this.handleScroll); } }) },
滾動事件:
到現(xiàn)在為止,當(dāng)
table
表格滾動的時候,就會觸發(fā)handleScroll
方法,下面是handleScroll
方法:
handleScroll() { //滾動的事件 const tableComponent = this.$refs.myTable; const tableContainer = tableComponent.$el.querySelector('.ant-table-body'); const scrollPosition = tableContainer.scrollTop; const isAtTop = scrollPosition === 0; if (isAtTop) { // 已滾動到頂部,執(zhí)行相應(yīng)操作 this.render(-100) } const isAtBottom = tableContainer.scrollHeight - scrollPosition === tableContainer.clientHeight; if (isAtBottom) { // 已滾動到底部,執(zhí)行相應(yīng)操作 this.render(100) } },
- 使用
this.$refs.myTable
獲取表格組件的引用,并使用tableComponent.$el.querySelector('.ant-table-body')
獲取表格容器元素的引用。這些步驟與前面的代碼段相同。 - 接下來,它獲取表格容器元素的滾動位置,使用
tableContainer.scrollTop
來獲取當(dāng)前滾動的垂直位置。 - 然后,它通過比較滾動位置是否為0來判斷是否滾動到了頂部,將結(jié)果保存在
isAtTop
變量中。 - 如果滾動到了頂部(即
isAtTop
為真),調(diào)用了render(-100)
方法,并將參數(shù)-100傳遞給它,在render
方法中調(diào)用了接口獲取前100條數(shù)據(jù) - 接下來,通過比較表格容器元素的總高度減去滾動位置是否等于容器元素的可見高度,來判斷是否滾動到了底部。這個條件判斷保存在
isAtBottom
變量中。 - 如果滾動到了底部(即
isAtBottom
為真),調(diào)用了render(100)
方法,并將參數(shù)100傳遞給它,調(diào)用render
方法中的接口獲取后100條數(shù)據(jù)
總之,這段代碼的作用是在滾動事件發(fā)生時,檢查是否滾動到了頂部或底部,并且相應(yīng)的請求服務(wù)來拿到我們想要的數(shù)據(jù)。這樣就成功啦!
到此這篇關(guān)于ant design vue中table表格滾動加載實現(xiàn)思路的文章就介紹到這了,更多相關(guān)ant design vue滾動加載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue中全局路由守衛(wèi)中替代this操作(this.$store/this.$vux)
這篇文章主要介紹了vue中全局路由守衛(wèi)中替代this操作(this.$store/this.$vux),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07關(guān)于json-bigint處理大數(shù)字問題
這篇文章主要介紹了關(guān)于json-bigint處理大數(shù)字問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05基于Vue el-autocomplete 實現(xiàn)類似百度搜索框功能
本文通過代碼給大家介紹了Vue el-autocomplete 實現(xiàn)類似百度搜索框功能,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10解決vue props傳Array/Object類型值,子組件報錯的情況
這篇文章主要介紹了解決vue props傳Array/Object類型值,子組件報錯的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11vue+elementUI如何實現(xiàn)頂部路由標(biāo)簽跳轉(zhuǎn)
這篇文章主要介紹了vue+elementUI如何實現(xiàn)頂部路由標(biāo)簽跳轉(zhuǎn)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03利用v-viewer圖片預(yù)覽插件放大需要預(yù)覽的圖片
本文介紹了v-viewer插件的安裝和使用步驟,包括npm安裝、在main.js文件中全局引入,以及常用的三種使用方式,文章提供了簡單的布局頁面效果,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10