vue3+el-select实现触底加载更多功能(ts版)

 更新时间:2023年07月11日 11:05:56   作者:我总是词不达意  
这篇文章主要给大家介绍了基于vue3和el-select实现触底加载更多功能,文中有详细的代码示例,感兴趣的同学可以借鉴参考下

思路

使用全局指令来实现触底加载功能

通过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 加载更多功能内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • webpack + vue 打包生成公共配置文件(域名) 方便动态修改

    webpack + vue 打包生成公共配置文件(域名) 方便动态修改

    这篇文章主要介绍了webpack + vue 打包生成公共配置文件(域名) 方便动态修改,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • 实例解析Vue.js下载方式及基本概念

    实例解析Vue.js下载方式及基本概念

    vue是一套用于构建用户界面的渐进式框架。接下来通过本文给大家分享Vue.js下载方式及基本概念,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-05-05
  • vue2.0项目中使用Ueditor富文本编辑器示例代码

    vue2.0项目中使用Ueditor富文本编辑器示例代码

    本篇文章主要介绍了vue2.0项目中使用Ueditor富文本编辑器示例代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-08-08
  • 详解Vite如何处理CSS预处理器

    详解Vite如何处理CSS预处理器

    在现代前端开发中,CSS 预处理器如 Sass、Less 和 Stylus 等工具,为样式编写提供了更强大的功能和更好的开发体验,本文将探讨 Vite 是如何处理 CSS 预处理器的,以及如何在实际项目中配置和使用它们,需要的朋友可以参考下
    2025-02-02
  • Vue组件样式作用域问题:原因与解决方式

    Vue组件样式作用域问题:原因与解决方式

    本文将深入探讨 Vue 组件样式作用域的常见问题,并提供多种解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • vue全局过滤器概念及注意事项和基本使用方法

    vue全局过滤器概念及注意事项和基本使用方法

    这篇文章主要给大家分享了vue全局过滤器概念及注意事项和基本使用方法,下面文字围绕vue全局过滤器的相关资料展开具体的详细内容,需要的朋友可以参考一下,希望对你有所帮助
    2021-11-11
  • Vue3中defineProps设置默认值的方法实现

    Vue3中defineProps设置默认值的方法实现

    Vue3中我们经常需要使用defineProps来定义组件的属性,本文主要介绍了Vue3中defineProps设置默认值的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • vue路由守卫,限制前端页面访问权限的例子

    vue路由守卫,限制前端页面访问权限的例子

    今天小编就为大家分享一篇vue路由守卫,限制前端页面访问权限的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • vue3使用深度选择器修改样式问题

    vue3使用深度选择器修改样式问题

    这篇文章主要介绍了vue3使用深度选择器修改样式问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • 基于vue实现探探滑动组件功能

    基于vue实现探探滑动组件功能

    这篇文章主要介绍了基于vue实现探探滑动组件功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05

最新评论