el-select滚动条到底部触发请求

本文介绍了如何解决下拉框加载大量数据导致的请求超时问题,通过创建一个Vue指令实现滚动触底时分页加载更多数据。详细步骤包括在src目录下创建loadMore.js,定义指令逻辑,然后在main.js中引入并全局注册。同时,展示了如何结合远程搜索功能,动态加载并过滤数据,以提高用户体验。
摘要由CSDN通过智能技术生成

下拉框一下子请求上万条数据导致请求超时,我们可以使用分页请求,当el-select滚动触底的时候可以触发请求下一页。

1.在src目录下新建directive/loadMore/loadMore.js
2.loadMore.js内容:
指令代码

import Vue from 'vue'
export default {}.install = (Vue, options = {}) => {
  Vue.directive('loadmore', {
    inserted(el, binding) {
      // 获取element-ui定义好的scroll盒子
      const SELECTDOWN_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap')
      SELECTDOWN_DOM.addEventListener('scroll', function() {
        const CONDITION = this.scrollHeight - this.scrollTop <= this.clientHeight
        if (CONDITION) {
          binding.value()
        }
      })
    }
  })
}

3.在main.js中引入该文件。例如:

import loadMore from '@/directive/loadMore/loadMore' // 下拉加载更多
Vue.use(loadMore);

这样就能在全局使用该指令了
4.使用

	<el-select
		v-loadmore="这里是你自己定义的函数"
	>
		
	</el-select>

还可以配上远程搜
HTML

		<el-select
          filterable
          remote
          :remote-method="remoteMethod"
        >
         
        </el-select>


Js

	//远程获取供应商
    async remoteMethod(query){
      const { content } = await findAll({
        name:query,
        currentPage: 1,
        limit: 200,
      });
      let dataList = content.content;
      for (let i = 0; i < dataList.length; i++) {
        for(let j =0 ;j < this.merchantList.length ; j++){//删除全部重复的
          if(this.merchantList[j].value == dataList[i].id){
            this.merchantList.splice(j,1)
          }
        }
        this.merchantList.unshift({ id: dataList[i].id, name: dataList[i].name });//再将最新的插入到第一位
      }
    },
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值