Element-Plus Select組件實現(xiàn)滾動分頁加載功能
Element-Plus的select組件并沒有自帶滾動分頁加載的功能,其雖然提供了自定義下拉菜單的底部的方式可以自定義上一頁及下一頁操作按鈕的方式進(jìn)行分頁加載切換:

但如果不想通過點擊分頁按鈕的方式,利用滾動觸底進(jìn)行下一頁加載的話,可以利用Vue自定義指令實現(xiàn):
自定義指定的實現(xiàn)方式,在網(wǎng)絡(luò)上已經(jīng)有實現(xiàn)的代碼了,只不過需要在<el-select>上添加指定的popper-class(比如:popper-class=“single-select-loadmore”),這樣做主要是因為<el-select>默認(rèn)是將下拉列表插入至 body 元素(teleported=true),為了獲取下拉列表的實際Dom對象而額外添加了popper-class:
const selectDom = document.querySelector('.single-select-loadmore .el-select-dropdown__wrap')這樣做略顯麻煩,不夠靈活。那么有沒有辦法,不設(shè)置額外的popper-class來獲取到對應(yīng)的下拉列表的Dom元素呢?Element-Plus文檔并沒有相關(guān)獲取下拉列表Dom的相關(guān)屬性,并且在<el-select>渲染的Dom和下拉列表的Dom元素在審查代碼時也沒有發(fā)現(xiàn)明顯的關(guān)聯(lián)性。但通過對mounted周期調(diào)試,發(fā)現(xiàn)了埋藏深處的popperRef.contentRef正是我們要找的下拉列表的Dom,于是代碼可以這樣實現(xiàn):
// src/directive/elSelectLoadMore.js
export default {
mounted(el, binding, vnode) {
const selectDom = vnode.children[0].component.refs.popperRef.contentRef.querySelector('.el-select-dropdown .el-select-dropdown__wrap');
function loadMores() {
// 判斷是否到底
const isBottom = this.scrollHeight - this.scrollTop <= this.clientHeight;
if (isBottom) {
// 執(zhí)行事件回調(diào)
binding.value && binding.value();
}
}
// 將獲取到的dom和函數(shù)掛載到el-select上,以便實例銷毀時進(jìn)行事件移除處理
el._selectDom = selectDom;
el._selectLoadMore = loadMores;
// 監(jiān)聽滾動事件
selectDom?.addEventListener('scroll', loadMores.bind(selectDom));
},
// 實例銷毀
beforeUnmount(el) {
if (el._selectLoadMore) {
el._selectDom.removeEventListener('scroll', el._selectLoadMore);
delete el._selectDom;
delete el._selectLoadMore;
}
}
}// src/directive/index.js
import elSelectLoadMore from './common/elSelectLoadMore'
export default function directive(app){
app.directive('selectLoadmore', elSelectLoadMore)
}// src/main.js import App from './App' import directive from './directive' const app = createApp(App) directive(app)
經(jīng)過簡單測試,上述代碼可以正常實現(xiàn)分頁。需要注意的是上述selectDom的獲取方式?jīng)]有經(jīng)過充分測試,只作為實驗性代碼。
到此這篇關(guān)于Element-Plus Select組件實現(xiàn)滾動分頁加載的文章就介紹到這了,更多相關(guān)Element-Plus Select滾動分頁加載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue?響應(yīng)式系統(tǒng)依賴收集過程原理解析
Vue 初始化時就會通過 Object.defineProperty 攔截屬性的 getter 和 setter ,為對象的每個值創(chuàng)建一個 dep 并用 Dep.addSub() 來存儲該屬性值的 watcher 列表,這篇文章主要介紹了Vue?響應(yīng)式系統(tǒng)依賴收集過程分析,需要的朋友可以參考下2022-06-06
基于Electron+Vite快速構(gòu)建Vue3桌面應(yīng)用
這篇文章主要介紹了如何基于Electron和Vite快速構(gòu)建Vue3桌面應(yīng)用,本文主要技術(shù)棧就是Vue3、vite、Electron,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-07-07
使用Capacitor將Vue項目轉(zhuǎn)換為Android App的操作步驟
這篇文章主要介紹了如何將Vue項目轉(zhuǎn)換為Android應(yīng)用,包括設(shè)置開發(fā)環(huán)境、打包Vue項目、安裝和配置Capacitor,以及如何處理網(wǎng)絡(luò)請求和配置圖標(biāo),此外,還包括了如何編譯生成APK文件和處理可能的錯誤,需要的朋友可以參考下2025-10-10
Vue動態(tài)控制input的disabled屬性的方法
這篇文章主要介紹了Vue動態(tài)控制input的disabled屬性的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-06-06
Vue3+Spring Framework框架開發(fā)實戰(zhàn)
這篇文章主要為大家介紹了Vue3+Spring Framework框架開發(fā)實戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04

