SoFunction
Updated on 2025-04-12

vue3+el-select implements bottoming loading more functions (ts version)

Ideas

Use global instructions to implement bottom-down loading

passel-selectIn-housepopper-classAdd a drop-down boxClass Name

Create a file in the utils folder under src

import { Directive, DirectiveBinding } from 'vue'
const loadMore: Directive = {
  beforeMount(el: any, binding: DirectiveBinding) {
    (el)
    const selectDom = ((".more_select_dropdown") as any).querySelector(".el-select-dropdown .el-select-dropdown__wrap");
    (selectDom, 'selectDom++++++++++++++');
    function loadMores(this: any) {
      const isBase =  -  <= 
      if (isBase) {
         && ()
      }
    }
     = selectDom
     = loadMores
    nextTick(() => {
      selectDom?.addEventListener('scroll', loadMores)
    })
  },
  beforeUnmount(el: any) {
    if () {
      ('scroll', )
      delete 
      delete 
    }
  }
}
export default loadMore

import { createApp } from 'vue'
import App from './'
import router from '/@/router'
import loadMore from '@/utils/selectLoadMoreDirective'
const app = createApp(App)
(router)
('loadMore', loadMore)

&lt;template&gt;
  &lt;div class="p-2"&gt;
    &lt;el-select v-model="selectedValue" v-loadMore="loadMore" class="more-select" popper-class="more_select_dropdown"
      @change="selectChange"&gt;
      &lt;el-option v-for="(item, index) in list" :key="`${}${index}`" :label="" :value="" /&gt;
    &lt;/el-select&gt;
  &lt;/div&gt;
&lt;/template&gt;
&lt;script setup name="Home" lang="ts"&gt;
import { ComponentInternalInstance, computed, getCurrentInstance, nextTick, onMounted, reactive, ref, toRefs } from 'vue';
const selectedValue = ref([])
const selectData = reactive({
  pageIndex: 1,
  pageSize: 5,
  finished: false
})
const list = ref([
  {
    value: 1,
    label: 'Test 1'
  },
  {
    value: 2,
    label: 'Test 2'
  },
  {
    value: 3,
    label: 'Test 3'
  },
  {
    value: 4,
    label: 'Test 4'
  },
  {
    value: 5,
    label: 'Test 5'
  },
  {
    value: 6,
    label: 'Test 6'
  },
  {
    value: 7,
    label: 'Test 7'
  },
  {
    value: 8,
    label: 'Test 8'
  },
])
//Base functionconst loadMore = () =&gt; {
  ('Falling down');
  // Anti-shake treatment  setTimeout(() =&gt; {
    if () return //A value of true means there is no data     += 1
    //  = ()
    for (let i = 1; i &lt;= 8; i++) {
      ({
        value: i,
        label: `test${i}`
      })
    }
  }, 500)
}
// Trigger when the selected value changesconst selectChange = () =&gt; {
  ('Selected xxxx')
}
&lt;/script&gt;

This is the article about the bottom-down loading of more functions in vue3+el-select. For more related vue3+el-select loading, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!