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

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-option
              v-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);//其实相当于初始化

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


http://www.kler.cn/news/326734.html

相关文章:

  • 现代前端框架实战指南:React、Vue.js、Angular核心概念与应用
  • elasticsearch 向量检索 ann
  • 【架构】前台、中台、后台
  • QT 界面编程中使用协程
  • unity 中向指定的动画片段添加动画事件,并播放动画,同时获取动画片段的时长。
  • Redis进阶篇 - 缓存穿透、缓存击穿、缓存雪崩问题及其解决方案
  • 谷歌网站收录查询,帮助您快速准确地查询网站在谷歌的收录情况的3个方法
  • Unity DOTS Baking System与Baking World
  • SU03T(语音识别播报模块)
  • 微信小程序-动画
  • python爬虫bs4库的用法
  • 【电机-概述及分类】
  • 【SQL】笛卡尔积比较收入更高的员工
  • 如何用Python监控本股市的方法
  • 【中关村在线-注册/登录安全分析报告】
  • 基于单片机的多点温度测量系统
  • 在Ubuntu下通过Docker部署NAS服务器
  • 遇到慢SQL、SQL报错,应如何快速定位问题 | OceanBase优化实践
  • Flet介绍:平替PyQt的好用跨平台Python UI框架
  • sheng的学习笔记-logback
  • 实验OSPF路由协议(课内实验)
  • 运输层和应用层之间的接口和端口有什么关系
  • Android常用C++特性之std::optional
  • 7. 无线网络安全
  • Docker全家桶:Docker Compose项目部署
  • CICD Jenkins实现Pipline
  • sqli-labs时间盲注、布尔盲注脚本
  • 数据结构之链表(2),双向链表
  • 面试系列-携程暑期实习一面
  • C++ | Leetcode C++题解之第438题找到字符串中所有字母异位词