vue3实现 下拉框触底加载更多及搜索

2023-10-27

思路

做一个全局指令
查询了大量文章 发现统一用的指令 来实现触底加载功能 实操中发现 在vu3 的版本中
(我这个项目中)无法通过自定义指令的形参 获取el-select-dropdown .el-select-dropdown__wrap 元素,所以通过el-select中的popper-class给下拉框加入一个类名 实现下拉框的选中,为了 方便指令通用 给el-select 加入自定义属性标签data-class 同popper-class值 ,方便获取到当前标签的popper-class

2、项目中的实际用法

在el-select 下再次封装

filtereMethod:自定义筛选的方法
popper-class:为当前select 下拉框的类名
data-class: 同popper-class值 是为了解决指令el参数无法获取到.el-select-dropdown .el-select-dropdown__wrap元素
v-selectLoadMore: 自定义指令

<el-select
	v-model="ruleForm.userId"
	class="m-2"
	data-class="selectClass"
	placeholder="请选择"
	filterable
	:filter-method="filtereMethod"
	v-selectLoadMore="getUserList"
	popper-class="selectClass"
>
	<el-option v-for="item in options" :key="item.userId" :label="item.nickname" :value="item.userId" />
</el-select>
const userParams = reactive({
	bindSupplier: "2",
	page: 0,
	pageSize: 10,
	nickname: ""
});

// 用于终止加载  后端数据返回的当前列表的总页数
let totalPage = 1;
const getUserList = async () => {
	if (userParams.page < totalPage) {
		let res: any = await getUserSupplierList(userParams as any);
		if (userParams.page === 0) {
			totalPage = res.data.totalPages;
		}
		options.value = options.value.concat(res.data.datas);
		userParams.page++;
	}
};


const filtereMethod = (val: any) => {
	userParams.page = 0;
	// 我这儿是根据名称筛选
	userParams.nickname = val;
	// 筛选时 下拉框回到顶部
	nextTick(async () => {
		// 注意: .selectClass 为当前所筛选的select 下拉框的 popper-class 属性值
		let element = (document.querySelector(".selectClass") as any).querySelector(".el-select-dropdown .el-select-dropdown__wrap");
		element.scrollTop = 0;
		let res: any = await getUserSupplierList(userParams as any);
		options.value = res.data.datas;
	});
};

3、指令封装


查询了很多文章   大部分都是直接通过el.querySelector(".el-select-dropdown .el-select-dropdown__wrap")来查询当前元素  但是我通过实操发现无法获取 所以这里通过`自定义属性data-class来获取当前元素`
我这儿就不再写本项目注册全局指令的方法了 参考如下
/**
 * v-selectLoadMore
 * select 触底加载
 */
import type { Directive, DirectiveBinding } from "vue";

//  通过给标签加 data-class 来获取当前下拉框dom
const selectLoadMore: Directive = {
	beforeMount(el: DirectiveBinding, binding: DirectiveBinding) {
		const dataClass = "." + (el as any).getAttribute("select-class");
		const dataClassElement = document.querySelector(dataClass) as any;
		const element = dataClassElement.querySelector(".el-select-dropdown .el-select-dropdown__wrap");
		element.addEventListener("scroll", () => {
			const { scrollTop, scrollHeight, clientHeight } = element;
			const scrollDistance = scrollHeight - scrollTop - clientHeight;
			if (scrollDistance <= 0) {
				binding.value();
			}
		});
	}
};

export default selectLoadMore;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3实现 下拉框触底加载更多及搜索 的相关文章

随机推荐

  • 三、OpenCV图像的预处理——二值化与自适应阈值

    教程汇总 python基础入门系列 定义 图像的二值化 就是将图像上的像素点的灰度值设置为0或255 也就是将整个图像呈现出明显的只有黑和白的视觉效果 一幅图像包括目标物体 背景还有噪声 要想从多值的数字图像中直接提取出目标物体 常用的方法
  • 矩阵求秩

    矩阵的秩怎么计算 这个问题一下子我居然不知道怎么下手 虽然本科的时候学过线性代数 但是好久不用 很多东西都忘了 今天略微梳理一下吧 最简单直观的方法 化成行最简形 或行阶梯形 然后数一下非零行数 例如 将矩阵做初等行变换后 非零行的个数叫行
  • Python 实现多个类别数据的直方图区间层面累积堆叠

    Python 实现多个类别数据的直方图区间层面累积堆叠 数据可视化是数据科学中不可缺少的一部分 它能够帮助我们更好地理解和分析数据 直方图是一种常用的数据可视化方法 它可以将数据分布情况以柱状图的形式展示出来 如果存在多个类别的数据 我们可
  • mysql convert函数 解决读取double为科学计数法问题

    convert顾名思义就是转化 cast差不多 MySQL CONVERT 函数 参考手册 为什么需要这个函数 mysql是弱类型的 where stringcol 1 and intcol 1 都行 会自动转化 那我为什么还要呢 mysq
  • 错误:编码GBK的不可映射字符解决方案(亲测有效)

    CMD编译运行JAVA程序出现的错误 原要求 这次作业要求用命令行输出 但是java命令后显示的是中文乱码 也有的出现错误 编码GBK的不可映射字符 原因 引用 由于JDK是国际版的 我们在用javac exe编译时 编译程序首先会获得我们
  • 插入mysql,Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation:Data truncation: Data too long

    插入mysql 报错 Error updating database Cause com mysql cj jdbc exceptions MysqlDataTruncation Data truncation Data too long
  • Legal or Not HDU - 3342 拓扑排序 判环

    这道题的意思是 给你n个点 m行关系数据 左 gt 右 判断有无环的出现 方法 直接拓扑排序 如果能正常排序完 这个就是无环的有向图DAG 如果不能 在拓扑排序的过程中有些点的入度经过去边操作之后一直不为零 就是有环的存在 include
  • GPT4.0一句话实现各类图表制作,让数据可视化变得更简单!类图、流程图、ER图.....

    不知道大家有没有被ER建模工具复杂的操作按钮给困扰过 在作者学习ER建模时 曾希望能直接画出类图 但最终还是不得不学习繁琐的操作流程 然而 随着GPT的出现 AI现在也可以绘制UML图了 今天要向大家分享一个AI工具 它能够借助强大的GPT
  • STM32多中断模式

    1 基本概念 ARM Coetex M3内核共支持256个中断 其中16个内部中断 240个外部中断和可编程的256级中断优先级的设置 STM32目前支持的中断共84个 16个内部 68个外部 还有16级可编程的中断优先级的设置 仅使用中断
  • STM32与BLE蓝牙通信 Android APP配置(一)

    事物的难度远远低于对事物的恐惧 0 前言 最近完成了一个基于BLE蓝牙通信的简单APP 在这里记录下来 供大家参考希望能给需要的人解决疑惑 这个APP中一共是两个界面 第一个界面实现打开蓝牙 关闭蓝牙 扫描蓝牙和显示扫描的结果 通过选择扫描
  • 【接口测试基础】第十四篇

    iHRM项目实战 简介 功能模块 技术架构 前端 以Node js为核心的Vue js前端技术生态架构 后端 SprintBoot SprintCloud SprintMVC SprintData Spring全家桶 MySQL Redis
  • java list stream 去除 null_Stream流的这些操作,你得知道,对你工作有很大帮助

    作者 扬帆 起航 原文 https blog csdn net qq 43677736 Stream流 Stream 流 是一个来自数据源的元素队列并支持聚合操作 元素是特定类型的对象 形成一个队列 Java中的Stream并不会存储元素
  • SPSS软件学习

    1 文件 新建 数据 2 修改变量信息 在这里插入图片描述 3 查看数据基本情况 分析 描述统计 描述 4 相关性分析 相关 双变量 结果显示Pearson相关系数为 0 902 P值小于0 01 相关关系具有统计学意义 但实际上它们不一定
  • JAX基本用法以及GCN实现

    JAX定位 JAX 不是一个深度学习框架或深度学习库 其设计初衷也不是成为一个深度学习框架或深度学习库 JAX 的定位科学计算 Scientific Computing 和函数转换 Function Transformations 的交叉融
  • 2021年最新Python讲义:类和对象(含练习小项目)

    类和对象 目标 类和对象的概念 类和对象的关系 类的设计 01 类和对象的概念 类 和 对象 是 面向对象编程的 两个 核心概念 1 1 类 类 是对一群具有 相同 特征 或者 行为 的事物的一个统称 是抽象的 不能直接使用 特征 被称为
  • BUCK电源芯片中自举电容的说明

    自举电容的说明 在BUCK电路中 经常会看到一个电容连接在芯片的SW和BOOST管脚之间 这个电容称之为自举电容 关于这个电容 在下面对该电容进行说明 图1 LT3840应用电路图 1 MOS工作原理 首先认识MOS的符号 确定是N型还是P
  • JeeSite 4.1.3 发布,支持一级菜单在顶部,各种组件改进

    开发四年只会写业务代码 分布式高并发都不会还做程序员 gt gt gt 新增 新增参数配置 sys index menuStyle 2 的时候 一级菜单显示在主框架顶部 新增 lang defaultLocale 和 lang defaul
  • JDK1.5新特性一览--转

    JDK1 5 开发代号猛虎 的一个重要主题就是通过新增一些特性来简化开发 这些特性包括泛型 for each 循环 自动装包 拆包 枚举 可变参数 静态导入 使用这些特性有助于我们编写更加清晰 精悍 安全的代码 下面我们简单介绍一下这些新特
  • 数据库概述10(事务)

    MySQL事务 MySQL事务机制主要用于处理操作量大 复杂度高的数据 在MySQL中只有使用了Innodb数据库引擎的数据表和数据库才支持事务 事务处理可以用来维护数据的完整性 保证多条SQL语句要么全部执行 要么全部不执行 事务用于管理
  • vue3实现 下拉框触底加载更多及搜索

    思路 做一个全局指令 查询了大量文章 发现统一用的指令 来实现触底加载功能 实操中发现 在vu3 的版本中 我这个项目中 无法通过自定义指令的形参 获取el select dropdown el select dropdown wrap 元