element ui el-select组件添加选项下拉加载

需求描述:在做搜索的时候由于有一个下拉列表接口返回数据特别多所以对列表进行了一个下拉触底加载的事件,但是官方文档是没有对应的api的所以自己使用指令写了一个方法。

实现代码:

javascript 复制代码
        <el-select
          v-model="sellerNameSearchVal"
          v-select-loadmore="loadmore"
          remote
          filterable
          placeholder="请输入要搜索的供应商名称"
          class="w100"
          clearable
          :remote-method="selectSearch"
          @visible-change="selectVisibleChange"
          @change="onSellerNameChange"
          @clear="onSellerNameClear"
          @keyup.native.enter="onSellerNameEnter"
        >
          <el-option
            v-for="(item,index) in supplierList"
            :key="index"
            :label="item.label"
            :value="item.value"
          />
          <!-- 分页状态 -->
          <el-option disabled style="height: 25px;" class="flex flex-center">
            <div v-show="selectLoading">
              <i class="el-icon-loading mr10" />
              <span>正在加载更多...</span>
            </div>

            <div v-show="supplierList.length <= 0 && !selectLoading">无匹配数据</div>

            <div v-if="supplierList.length > 0 && supplierLeave <= 0">没有更多了</div>
          </el-option>
        </el-select>

关键点在于v-select-loadmore="loadmore"这个自定义指令

javascript 复制代码
  directives: {
    'select-loadmore': {
      bind(el, binding) {
        const element = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap')
        element.addEventListener('scroll', function(e) {
          // this.scrollTop 存在小数,导致加减存在1的误差
          const condition = Math.abs(this.scrollHeight - this.scrollTop - this.clientHeight) <= 1
          if (condition) binding?.value()
        })
      }
    }
  },

这个指令的逻辑是监听元素的滚动事件,当滚动高度达到select的高度后调用loadmore这个方法去加载下一页的数据

相关推荐
_OP_CHEN7 分钟前
【前端开发之CSS】(三)CSS 常用元素属性宝典(上):从字体到文本,手把手教你打造高颜值网页!
前端·css·html·网页开发·文本属性·字体属性·页面美化
你脸上有BUG44 分钟前
【工程化】记给ant-design-vue打补丁的示例
前端·javascript·vue.js·补丁·ant-design-vue
晚霞的不甘1 小时前
Flutter for OpenHarmony 进阶实战:打造 60FPS 流畅的物理切水果游戏
javascript·flutter·游戏·云原生·正则表达式
雨季6661 小时前
构建 OpenHarmony 文本高亮关键词标记器:用纯字符串操作实现智能标注
开发语言·javascript·flutter·ui·ecmascript·dart
你这个代码我看不懂1 小时前
Vue子父组件.sync
javascript·vue.js·ecmascript
灰灰勇闯IT2 小时前
Flutter for OpenHarmony:布局组件实战指南
前端·javascript·flutter
⑩-2 小时前
Vue框架学习
前端·vue.js·学习
a程序小傲2 小时前
京东Java面试被问:基于Gossip协议的最终一致性实现和收敛时间
java·开发语言·前端·数据库·python·面试·状态模式
小二·2 小时前
Python Web 开发进阶实战:AI 原生应用商店 —— 在 Flask + Vue 中构建模型即服务(MaaS)与智能体分发平台
前端·人工智能·python
Devlive 开源社区2 小时前
技术日报|推理RAG文档索引PageIndex登顶日增1374星,React视频工具Remotion二连冠进前二
前端·react.js·前端框架