Element-Plus Select組件實現(xiàn)滾動分頁加載功能
Element-Plus的select組件并沒有自帶滾動分頁加載的功能,其雖然提供了自定義下拉菜單的底部
的方式可以自定義上一頁
及下一頁
操作按鈕的方式進行分頁加載切換:
但如果不想通過點擊分頁按鈕的方式,利用滾動觸底進行下一頁加載的話,可以利用Vue自定義指令實現(xiàn):
自定義指定的實現(xiàn)方式,在網(wǎng)絡(luò)上已經(jīng)有實現(xiàn)的代碼了,只不過需要在<el-select>
上添加指定的popper-class
(比如:popper-class=“single-select-loadmore”),這樣做主要是因為<el-select>
默認是將下拉列表插入至 body 元素(teleported=true),為了獲取下拉列表的實際Dom對象而額外添加了popper-class
:
const selectDom = document.querySelector('.single-select-loadmore .el-select-dropdown__wrap')
這樣做略顯麻煩,不夠靈活。那么有沒有辦法,不設(shè)置額外的popper-class
來獲取到對應的下拉列表的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上,以便實例銷毀時進行事件移除處理 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使用fabric.js實現(xiàn)局部截圖與大圖預覽功能
這篇文章主要為大家詳細介紹了Vue如何使用fabric.js實現(xiàn)局部截圖與el-image-viewer大圖預覽功能,文中的示例代碼講解詳細,感興趣的可以了解下2024-02-02vue自定義組件實現(xiàn)v-model雙向綁定數(shù)據(jù)的實例代碼
vue中父子組件通信,都是單項的,直接在子組件中修改prop傳的值vue也會給出一個警告,接下來就用一個小列子一步一步實現(xiàn)了vue自定義的組件實現(xiàn)v-model雙向綁定,需要的朋友可以參考下2021-10-10elementui中的el-cascader級聯(lián)選擇器的實踐
本文主要介紹了elementui中的el-cascader級聯(lián)選擇器的實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10vue實現(xiàn)導航欄效果(選中狀態(tài)刷新不消失)
這篇文章主要為大家詳細介紹了vue實現(xiàn)導航欄效果,選中狀態(tài)刷新不消失,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12