当前位置: 首页 > news >正文

el-select实现懒加载

先看一个线上的演示示例:https://code.juejin.cn/pen/7273352811440504889

背景

我们在实际开发中经常遇到这样的需求:

el-select实现懒加载,用通俗的话说,为了增加响应速度,就是初始下拉只展示50条数据,滚动条下拉到底部后,再次调用接口增量加载接下来的50条数据,重复该情况,直到数据加载完成。

实现思路 

首先需要后端提供接口支持分页查询

前端调用接口需要传参当前页(currentPage)每页展示条数(pageNumber),每次滚动条滚动到底部后 currentPage++ 

比如:初次调用接口currentPage:1,pageNumber:50;那么第二次调用时候currentPage:2,pageNumber:50;以此类推。

那么我们如何知道滚动条滚动到底部了呢?

 

 参考链接:https://blog.csdn.net/weixin_43340372/article/details/132210911?spm=1001.2014.3001.5502

以上我们理解了如何判断滚动条滚动到底部了,

那么当滚动条滚动到底部后,如何触发加载方法呢?

vue给我们提供了自定义指令,

新建自定义指令el-select-lazyloading帮定到el-select元素上,在元素第一次帮定的时候会调用

bind方法,

通过这两个类(.el-select-dropdown .el-select-dropdown__wrap)我们可以拿到滚动的盒子,

对该盒子添加scroll滚动事件,滚动到底部时触发方法。

具体实现

Api

为了更接近真实,我们先模仿一个接口调用。

// 伪造接口调用
class Api {#baseData = [{value: '选项1',label: '黄金糕'}, {value: '选项2',label: '双皮奶'}, {value: '选项3',label: '蚵仔煎'}, {value: '选项4',label: '龙须面'}, {value: '选项5',label: '北京烤鸭'}, {value: '选项7',label: '北京烤鸭1'}, {value: '选项8',label: '北京烤鸭2'}, {value: '选项9',label: '北京烤鸭3'}, {value: '选项10',label: '北京烤鸭4'}]getData(currentPage = 1, pageNumber = 10) {return new Promise(resolve => {setTimeout(() => {let data = [];if (currentPage > 1) {data = this.#baseData.map(item => ({ value: item.value + `currentPage-${currentPage}`, label: item.label + `currentPage-${currentPage}` }))} else {data = this.#baseData;}resolve(data);}, 1000)})}
}
const api = new Api();

 以上代码中,首先新建了一个Api类,在该类中提供了每次调用接口的基础数据baseData,

看到这里大家可能会有疑问为什么baseData前要加一个#号(#baseData代表为私有属性,只能在本类中访问

getData方法接受两个传参,第一个当前页(currentPage),第二个每页的条数(pageNumber)

调用接口1秒后返回数据

 代码结构

<div id="app">选择活动:<el-select v-model="value" style="width: 300px" v-el-select-lazyloading="lazyloading"><el-option :label="item.label" :value="item.value" v-for="item in list" :key="item.value"></el-option></el-select>
</div><script>
// 伪造接口调用
class Api {#baseData = [{value: '选项1',label: '黄金糕'}, {value: '选项2',label: '双皮奶'}, {value: '选项3',label: '蚵仔煎'}, {value: '选项4',label: '龙须面'}, {value: '选项5',label: '北京烤鸭'}, {value: '选项7',label: '北京烤鸭1'}, {value: '选项8',label: '北京烤鸭2'}, {value: '选项9',label: '北京烤鸭3'}, {value: '选项10',label: '北京烤鸭4'}]getData(currentPage = 1, pageNumber = 10) {return new Promise(resolve => {setTimeout(() => {let data = [];if (currentPage > 1) {data = this.#baseData.map(item => ({ value: item.value + `currentPage-${currentPage}`, label: item.label + `currentPage-${currentPage}` }))} else {data = this.#baseData;}resolve(data);}, 1000)})}
}
const api = new Api();
// 全局注册组件
new Vue({el: '#app',directives: {"el-select-lazyloading": {bind(el, binding) {let SELECT_DOM = el.querySelector(".el-select-dropdown .el-select-dropdown__wrap");SELECT_DOM.addEventListener("scroll", function () {let condition =this.scrollHeight - this.scrollTop <= this.clientHeight;if (condition) {binding.value();}});},},},data() {return {currentPage: 1,pageNumber: 10,value: "",list: [],};},methods: {async lazyloading() {this.loading = true;const data = await api.getData(this.currentPage);this.loading = false;this.list.push(...data);this.currentPage++;}},mounted() {this.lazyloading();}
})</script>

参考链接:

 https://blog.csdn.net/weixin_43340372/article/details/132210911?spm=1001.2014.3001.5502

http://www.lryc.cn/news/147610.html

相关文章:

  • Java泛型机制
  • Linux CentOS安装抓包解包工具Wireshark图形化界面
  • 虹科分享 | 温度边缘效应对冻干成品含水量的影响(下)——优化和总结
  • ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319)
  • 说说我最近筛简历和面试的感受。。
  • Mysql /etc/my.cnf参数详解(一)
  • 用最少数量的箭引爆气球【贪心算法】
  • Matlab论文插图绘制模板第109期—特征渲染的标签气泡散点图
  • 音视频 ffplay命令播放媒体
  • 使用Fiddler模拟网络
  • 【Axure高保真原型】多图表动态切换
  • 笔试题-访问控制修饰符范围
  • 基于飞腾芯片的设计与调试入门指导
  • 了解 HarmonyOS
  • 【校招VIP】产品面试之面试官的真实意图
  • 实现远程访问Linux堡垒机:通过JumpServer系统进行安全的服务器管理
  • Go 1.21新增的 maps 包详解
  • 《向量数据库指南》——腾讯云向量数据库(Tencent Cloud VectorDB) SDK 正式开源
  • Tutorial: Mathmatical Derivation of Backpropagation
  • 如何在 Linux 中设置 SSH 无密码登录
  • 什么时候用增量式PID,什么时候用位置式PID
  • Go语言入门记录:从基础到变量、函数、控制语句、包引用、interface、panic、go协程、Channel、sync下的waitGroup和Once等
  • 位运算进阶操作
  • sql:SQL优化知识点记录(四)
  • Java----Sentinel持久化规则启动
  • Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单
  • 无涯教程-Android - Grid View函数
  • 【第四阶段】kotlin语言的解构语法过滤元素
  • 和24考研说拜拜,不考研读中外合作办学硕士——人大女王金融硕士
  • https比http安全在哪