VUE下拉选择分页,远程搜索

news/2024/9/19 8:18:14/ 标签: vue.js, 前端, javascript

实现效果

请添加图片描述

实现思路

  1. 初始化加载第一页;
  2. 监听下拉框的滚动事件,当滚动到底部的时候加载下一页;
  3. 输入搜索时,重置为第一页加载;
  4. 关闭下拉选择框时,判断如果存在搜索值,要清空搜索值、并加载第一页。

实现代码

html

<a-selectv-model:value="values":mode="multiple":show-search="true":filter-option="false":default-active-first-option="false"@popupScroll="onPopupScroll"@search="onSearch"@dropdownVisibleChange="onDropdownVisibleChange"
><a-select-option v-for="item in optionList" :key="`${item.value}-${refreshFlag}`" :value="item.value"><div :title="item.label">{{ item.label }}</div></a-select-option><a-select-option v-if="loading" disabled value="loading"><a-spin :spinning="true"></a-spin></a-select-option>
</a-select>

ts

const optionList = ref<{ label: string; value: string }[]>([]);
const loading = ref<boolean>(false);
const keyWord = ref<string>('');
const curPage = ref<number>(0);
const total = ref<number>(0);
const refreshFlag = ref<number>(1);// 最终搜索接口
const onRelationSearch = debounce(async (page = 1, curlist = []) => {try {const params: any = {condition: {keyWord: keyWord.value,},paging: {pageIndex: page,pageSize: 20,},};const res = await oneFunction(params);const dataList = res?.result || [];optionList.value = [...curlist,...dataList.map((item: any) => {return {label: item.name,value: item.id,};});];refreshFlag.value++;curPage.value = page;total.value = res?.result?.pageResult?.totalCount || 0;} finally {loading.value = false;}
}, 300);// 搜索前置判断
const getListBefore = (page: number, list: { label: string; value: string }[]) => {// _props传入 分页, 现有列表,输入框内容// 当不是第一页切 列表数量大于等于总数时终止掉if (page !== 1 && list.length >= total.value) {message.warning('没有更多数据了');} else if (loading.value) {// 如果处于加载中也终止掉return;}// 请求,加载中loading.value = true;// 请求接口onRelationSearch(page, list);
};// 滚动事件
const onPopupScroll = (event: any) => {const { target } = event;if (target.scrollTop + target.offsetHeight === target.scrollHeight) {// 调用加载数据,传入需求请求的分页getListBefore(curPage.value + 1, optionList.value);}
};// 搜索事件
const onSearch = (value: any) => {loading.value = false;optionList.value = [];keyWord.value = value;getListBefore(1, []);
};const onDropdownVisibleChange = debounce((open: boolean) => {if (!open && keyWord.value) {loading.value = false;keyWord.value = '';optionList.value = [];getListBefore(1, []);}
}, 300);

http://www.ppmy.cn/news/1527084.html

相关文章

7天速成前端 ------学习日志 (继苍穹外卖之后)

前端速成计划总结&#xff1a; 全26h课程&#xff0c;包含html&#xff0c;css&#xff0c;js&#xff0c;vue3&#xff0c;预计7天内学完。 起始日期&#xff1a;9.16 预计截止&#xff1a;9.22 每日更新&#xff0c;学完为止。 学前计划 课…

keep-alive缓存不了iframe

最近做了个项目&#xff0c;其中有个页面是由 iframe 嵌套了一个另外的页面&#xff0c;在运行的过程中发现 KeepAlive 并不生效&#xff0c;每次切换路由都会触发 iframe 页面的重新渲染&#xff0c;代码如下&#xff1a; <router-view v-slot"{ Component }">…

Blender渲染太慢怎么办?blender云渲染已开启

动画行业蓬勃发展&#xff0c;动画制作软件亦持续推陈出新&#xff0c;当制作平台日益丰富&#xff0c;创作难度降低&#xff0c;创作效率提升&#xff0c;如何高效完成复杂动画的渲染就成了从业者更关心的问题。 云渲染技术的出现&#xff0c;无疑为动画制作者提供了前所未有…

Python 入门教程(4)数据类型 | 4.2、数据类型转换

文章目录 一、数据类型转换1、 整数&#xff08;int&#xff09;与浮点数&#xff08;float&#xff09;之间的转换2、字符串&#xff08;str&#xff09;与整数/浮点数之间的转换3、列表&#xff08;list&#xff09;与字符串之间的转换4、注意事项 一、数据类型转换 在Python…

Cpp快速入门语法(下)(2)

文章目录 前言一、函数重载概念与使用C为何支持函数重载&#xff1f; 二、引用概念语法特性权限(常引用)使用场景与指针的区别 三、内联函数四、auto关键字(C11)五、基于范围的for循环(C11)六、指针空值nullptr(C11)总结 前言 承前启后&#xff0c;正文开始&#xff01; 一、函…

Java网络编程 TCP通信(Socket 与 ServerSocket)

1.TCP通信原理 TCP通信涉及两个端点&#xff1a;客户端和服务器。服务器端使用 ServerSocket 监听特定端口&#xff0c;等待客户端的连接请求。客户端使用 Socket 连接到服务器的IP地址和端口。一旦连接建立&#xff0c;双方就可以通过输入输出流进行数据交换. ServerSocket是…

详细分析Uniapp中的轮播图基本知识(附Demo)

目录 前言1. 基本知识2. Demo2.1 基本2.2 自定义分页2.3 自定义动画 3. 扩展 前言 先看代码示例&#xff1a; 实现了一个带有分页指示器的轮播图组件 <template><view class"work-container"><!-- 轮播图 --><uni-swiper-dot class"uni…

【电脑组装】✈️从配置拼装到安装系统组装自己的台式电脑

目录 &#x1f378;前言 &#x1f37b;一、台式电脑基本组成 &#x1f37a;二、组装 &#x1f379;三、安装系统 &#x1f44b;四、系统设置 &#x1f440;五、章末 &#x1f378;前言 小伙伴们大家好&#xff0c;上篇文章分享了在平时开发的时候遇到的一种项目整合情况&…

TCP/IP网络编程概念及Java实现TCP/IP通讯Demo

背景 在当今数字化的世界中&#xff0c;网络通信是连接各种设备和系统的关键。TCP/IP协议作为互联网通信的基石&#xff0c;被广泛应用于各种网络场景。了解TCP/IP网络编程的概念&#xff0c;并掌握如何在Java中实现TCP/IP通讯&#xff0c;对于开发人员来说是非常重要的。 TC…

webpack打包原理

目录 1、搭建结构&#xff0c;读取配置参数2、配置参数对象初始化 Compiler&#xff08;new Compiler(webpackOptions)&#xff09;3、挂载配置文件中的插件&#xff0c;4、执行Compiler 中的 run 方法进行编译5、根据配置文件中的entry 配置项找到所有的入口6、从入口文件出发…

JavaScript 基础 - 第16天_AJAX入门

文章目录 Day01_Ajax入门目录学习目标01.AJAX 概念和 axios 使用目标讲解小结 02.认识 URL目标讲解小结 03.URL 查询参数目标讲解小结 04.案例-查询-地区列表目标讲解小结 05.常用请求方法和数据提交目标讲解小结 06.axios 错误处理目标讲解小结 07.HTTP 协议-请求报文目标讲解…

椋鸟C++笔记#7:标准模板库STL初识

文章目录 标准模板库&#xff08;Standard Template Library&#xff09;STL的版本P.J.版RW版SGI版 STL的组成部分 萌新的学习笔记&#xff0c;写错了恳请斧正。 标准模板库&#xff08;Standard Template Library&#xff09; 标准模板库STL&#xff0c;是C标准库的一个非常重…

Snowflake 如何通过 Apache Iceberg 和 Polaris 为大数据的未来提供动力

Snowflake 的使命是让每个组织都成为数据驱动型组织。凭借围绕 Apache Iceberg 的最新创新和 Polaris 的推出,这家数据云公司使开发人员、工程师和架构师能够比以往任何时候都更快、更轻松地利用大数据获得变革性的业务见解。 将开放标准引入数据云 Snowflake 战略的核心是采…

教师薪酬管理系统的设计与实现

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;老师信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广…

HarmonyOS4升级到Harmonyos Next(Api 11)系列教程

目前此教程基于HarmonyOS NEXT Developer Preview、OpenHarmony&#xff08;Api 11&#xff09;讲解&#xff0c;兼容Api 12&#xff0c;HarmonyOS 5&#xff08;HarmonyOS Next&#xff09;正式发布后新增的Api还会在第一时间更新。 HarmonyOS NEXT和HarmonyOS 4的基本语法都是…

文件批量添加水印和密码合并单元格完整版

这段代码是一个 Java 方法&#xff0c;用于向文件添加水印和密码。您解释一下&#xff1a; 首先&#xff0c;它接受一个 fileAddress 参数&#xff0c;表示文件的地址。 然后&#xff0c;它创建了一个线程安全的列表 fileDatas&#xff0c;用于存储文件数据。 接下来&#xff…

ZW3D二次开发_UI_非模板表单_设置表单显示位置

1.ZW3D弹出非模板表单时可以设置弹出位置&#xff08;居中、左下角、右上角等&#xff09; 2.假设已创建好非模板表单 3.在Form属性中添加form_pos属性 4.输入值 base,CTR,0.0 &#xff0c;如下图 也可以设置为其他值显示在不同的位置&#xff0c;如下 5.重新编译&#xff0c;…

使用Jenkins扩展钉钉消息通知

Jenkins借助钉钉插件&#xff0c;实现当构建失败时&#xff0c;自动触发钉钉预警。虽然插件允许自定义消息主体&#xff0c;支持使用 Jenkins环境变量&#xff0c;但是局限性依旧很大。当接收到钉钉通知后&#xff0c;若想进一步查看报错具体原因&#xff0c;仍完全依赖邮件通知…

docker-ce.repo源、kubernetes.repo源

一、docker-ce.repo源 [docker-ce-stable] nameDocker CE Stable - $basearch baseurlhttps://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable enabled1 gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-stable-…

优购电商小程序的设计与实现+ssm(lw+演示+源码+运行)

优购电商小程序 摘 要 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对…