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

vue3.0 + element plus 全局自定义指令:select滚动分页

需求:项目里面下拉框数据较多 ,一次性请求数据,体验差,效果就是滚动进行分页。

看到这个需求的时候,我第一反应就是封装成自定义指令,这样回头用的时候,直接调用就可以了。

第一步请添加图片描述
第二步:
在main.js页面全局引入:

import directive from './directive' 
directive(app)

第三步:selectloadmore.js文件的代码

// 自定义指令export default {mounted(el, binding) {console.log(binding.value);const SELECTWRAP_DOM = document.querySelector(`${binding.value.className} .el-select-dropdown .el-select-dropdown__wrap`);if (SELECTWRAP_DOM) {SELECTWRAP_DOM.addEventListener('scroll', function () {const condition = this.scrollTop + this.clientHeight >= this.scrollHeight - 1;// 当滚动条滚动到最底下的时候执行接口加载下一页if (condition) {binding.value.loadMore && binding.value.loadMore();}});}},
};

第四步:页面使用

 <el-select v-model="queryParams.responsePerson" popper-class="myOption"  placeholder="请选择" v-selectloadmore="{className:'.myOption',loadMore:loadMore}"><el-optionv-for="item in responseOptions":key="item.value":label="item.label":value="item.value"clearable/></el-select>
v-selectloadmore="{className:'.myOption',loadMore:loadMore}",这个地方加入className是为了页面上如果有多个这种下拉框,进行区分

第五步:loadMore方法,这个根据实际功能进行逻辑调整

//自定义指令
let page = ref(1);
let totalCount = ref(0);
function loadMore() {if (page.value <= parseInt(totalCount.value / 10)) {page.value += 1;//获得接口数据loadOptions(page.value);}
}
function loadOptions(page) {proxyList({ status: 1, page_size: 10, page: page}).then((res) => {let arr = res.data.map((item)=>{return {label:item.name,value:item.id,}});responseOptions.value = responseOptions.value.concat(arr);totalCount.value = res.total;});
}

在使用的下拉框的地方,需要调用这个

page.value = 1;//这个千万不要忘了啊,因为这个忘了,我找了一晚上加一上午(需求是在弹窗里面,然后每次关闭弹窗,我重新打开下拉框的时候,就只会加载一次,哭死,找了那么久,都快绝望了)
responseOptions.value = [];//也要初始化一下,不然会重复添加
loadOptions(1);//其实相当于初始化

好了结束,方便后面自己查阅

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 第一弹:llama.cpp编译
  • 4.5 了解大数据处理基本流程
  • EP33 评分接口和已评分状态
  • 2、.Net 前端框架:Blazor - .Net宣传系列文章
  • Rainbond 助力城建智控,从传统开发到敏捷开发转型
  • memset函数
  • 【CSS】背景
  • 【C++】C++17中可以存储任意类型数据的对象——any类的使用与设计思想
  • 【小程序 - 大智慧】Expareser 组件渲染框架
  • C++中vector类的使用
  • Spring后端直接用枚举类接收参数,自定义通用枚举类反序列化器
  • 极狐GitLab 重要安全版本:17.3.3, 17.2.7, 17.1.8, 17.0.8, 16.11.10
  • 计算机网络第四章——网络层
  • mtk平台编译出来的cust.dtsi有什么作用
  • JVM频繁Full GC问题的排查与解决方案
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Android优雅地处理按钮重复点击
  • angular学习第一篇-----环境搭建
  • HashMap ConcurrentHashMap
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Java小白进阶笔记(3)-初级面向对象
  • Redis 中的布隆过滤器
  • TypeScript迭代器
  • 对象管理器(defineProperty)学习笔记
  • 飞驰在Mesos的涡轮引擎上
  • 浮动相关
  • 机器学习学习笔记一
  • 记一次删除Git记录中的大文件的过程
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 利用jquery编写加法运算验证码
  • 普通函数和构造函数的区别
  • 七牛云假注销小指南
  • 跳前端坑前,先看看这个!!
  • 新手搭建网站的主要流程
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • UI设计初学者应该如何入门?
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ‌[AI问答] Auto-sklearn‌ 与 scikit-learn 区别
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #{} 和 ${}区别
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (007)XHTML文档之标题——h1~h6
  • (2)(2.10) LTM telemetry
  • (done) 声音信号处理基础知识(2) (重点知识:pitch)(Sound Waveforms)
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (算法)N皇后问题
  • (转) 深度模型优化性能 调参
  • (转)Scala的“=”符号简介