vue3+el-select實現觸底加載更多功能(ts版)

目錄 思路 main.ts home.vue 思路 使用全局指令來實現觸底加載功能 通過 el-select 中的 popper-class 給下拉框加入一個 類名 在src下的utils文件夾中創建selectLoadMoreDirective.ts文件 import { Directive,
目錄
  • 思路
  • main.ts
  • home.vue

思路

使用全局指令來實現觸底加載功能

通過el-select中的popper-class給下拉框加入一個類名

在src下的utils文件夾中創建selectLoadMoreDirective.ts文件

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

main.ts

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

home.vue

<template>
  <div class="p-2">
    <el-select v-model="selectedValue" v-loadMore="loadMore" class="more-select" popper-class="more_select_dropdown"
      @change="selectChange">
      <el-option v-for="(item, index) in list" :key="`${item.value}${index}`" :label="item.label" :value="item.value" />
    </el-select>
  </div>
</template>
<script setup name="Home" lang="ts">
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: '測試1'
  },
  {
    value: 2,
    label: '測試2'
  },
  {
    value: 3,
    label: '測試3'
  },
  {
    value: 4,
    label: '測試4'
  },
  {
    value: 5,
    label: '測試5'
  },
  {
    value: 6,
    label: '測試6'
  },
  {
    value: 7,
    label: '測試7'
  },
  {
    value: 8,
    label: '測試8'
  },
])
//觸底函數
const loadMore = () => {
  console.log(' 觸底了');
  // 防抖處理
  setTimeout(() => {
    if (selectData.finished) return //值為true,則代表沒有數據了
    selectData.pageIndex += 1
    // list.value = list.value.concat(list2.value)
    for (let i = 1; i <= 8; i++) {
      list.value.push({
        value: i,
        label: `測試${i}`
      })
    }
  }, 500)
}
//選中值發生變化時觸發
const selectChange = () => {
  console.log('選中的xxxx')
}
</script>

到此這篇關于vue3+el-select實現觸底加載更多功能的文章就介紹到這了,更多相關vue3+el-select 加載更多功能內容請搜索技圈網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持技圈網!

聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 日韩电影中文字幕在线观看| 男女一边摸一边做刺激的视频| 扒开老师的蕾丝内裤漫画| 四虎影视成人永久在线播放| 一级成人黄色片| 波多野结衣妻奴| 国产精品亚洲一区二区三区| 久久精品人人做人人爽电影蜜月| 色窝窝无码一区二区三区成人网站 | 公与秀婷厨房猛烈进出视频| a级毛片免费观看网站| 欧美日韩精品一区二区三区不卡 | 无码日韩精品一区二区三区免费| 又硬又大又湿又紧a视频| baoyu116.永久免费视频| 欧美成人鲁丝片在线观看| 国产小鲜肉男同志gay| 中文字幕在线播放| 激情国产白嫩美女在线观看| 国产精品乱码一区二区三区| 久久国产高潮流白浆免费观看 | 色视频线观看在线播放| 日本24小时www| 人妻内射一区二区在线视频| 日日夜夜嗷嗷叫| 收集最新中文国产中文字幕| 人人妻人人爽人人澡AV| 亚洲一区二区三区在线网站| 扒开女同学下面粉粉嫩嫩| 亚洲精品成人片在线播放| 91秦先生在线| 女同性之间同床互摸视频| 亚洲国产成人99精品激情在线| 青青青青久在线观看视频| 女教师巨大乳孔中文字幕| 亚洲一区欧洲一区| 绿巨人晚上彻底放飞自己| 国产精品永久久久久久久久久| 久久久久久青草大香综合精品| 狠狠色噜噜狠狠狠合久| 国产在线高清精品二区色五郎|