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

Vue3 + ts+ elementUi 实现后台数据渲染到下拉框选项中,滑动加载更多数据效果

前言

功能需求:下拉框中分页加载后端接口返回的人员数据,实现滑动加载更多数据效果,并且可以手动搜索定位数据,此项目使用Vue3 + ts+ elementUi 实现

实现

把此分页滑动加载数据功能封装成vue中的hooks,文件命名为useMoreUser.ts

import {ref,reactive,nextTick} from 'vue'export  const useMoreUser = () => {const selectMoreData = reactive({page: 0, //当前页loading: false, //loadinghasMore: true, //判断是否还有更多数据selectValue: '', //下拉框选中数据selectOptions: [] //下拉框选项})// 人员列表加载数据列表【newPage: 页数,name: 搜索条件】const loadDataList = async (newPage: number, name?: string = '' ) => {try {selectMoreData.loading = true;//后端接口,入参为搜索条件人员姓名,页数let res = await getUserList(name, newPage); if (newPage === 1) { //初始化selectMoreData.selectOptions = [];}//存储后端接口返回数据selectMoreData.selectOptions.push(...res.rows);//判断是否还有更多数据selectMoreData.hasMore = selectMoreData.selectOptions.length < res.total;selectMoreData.page = newPage;} catch (err) {console.error(err);} finally {selectMoreData.loading = false;}};//加载更多数据const handleLoadMore = async (newPage: number,  name?: string = '' ) => {await loadDataList(newPage,name);};//返回下拉框选项const getList = ()=>{return selectMoreData.selectOptions;}//导出数据方法等return {selectMoreData,getList, loadDataList, handleLoadMore}
}

再继续封装下拉框选项组件 option.vue

<!-- 监听 el-select 的滚动,并提供触底加载数据的回调 -->
<template><el-option ref="el" class="el-select-loading" value=""><template v-if="hasMore"><el-icon class="el-select-loading__icon"><Loading /></el-icon><span class="el-select-loading__tips">{{ loadingText || "正在加载" }}</span></template><template v-else>{{ noMoreText || "到底了~" }}</template></el-option>
</template><script setup lang="ts">import { onMounted, onUnmounted, ref } from "vue";import { ElOption } from "element-plus";interface Props {// 当前页码page: number;// 是否加载中,用来过滤重复的加载loading: boolean;// 加载中的提示文案loadingText?: string;// 是否有更多数据可加载hasMore: boolean;// 没有更多数据的提示文案noMoreText?: string;}const props = defineProps<Props>();interface Emits {(event: "loadMore", data: number): any;}const emit = defineEmits<Emits>();const el = ref<typeof ElOption>();const observer = ref<IntersectionObserver>();// 组件加载成功,监听滚动onMounted(() => {if (!el.value) {return;}const callback: IntersectionObserverCallback = (entries) => {if (props.loading || !props.hasMore || !entries[0].isIntersecting) {return;}emit("loadMore", props.page + 1);};const options: IntersectionObserverInit = {root: el.value.$el.parentElement?.parentElement,rootMargin: "0px 0px 0px 0px",};observer.value = new IntersectionObserver(callback, options);observer.value.observe(el.value.$el);});// 组件卸载成功,取消滚动监听onUnmounted(() => {if (!el.value) {return;}observer.value?.unobserve(el.value.$el);});
</script><style lang="scss" scoped>.el-select-loading {display: flex;align-items: center;justify-content: center;cursor: initial;pointer-events: none;color: var(--el-color-info);font-size: 12px;&__icon {font-size: 16px;animation: rotate 1.5s linear infinite;}&__tips {margin-left: 6px;}@keyframes rotate {from {transform: rotate(0deg);}to {transform: rotate(360deg);}}}
</style>

最后到咱们真正使用页面index.vue,封装时候有些费事,但是使用起来就简单了
template部分

 <el-select class="customSelect" filterable remote :remote-method="remoteMethod"v-model="user" placeholder="请选择人员"style="width: 100%"><el-optionv-for="item in selectMoreData.selectOptions":key="item.userId":label="`${item.userName}`":value="item.userId"><span style="float: left">{{ `${item.userName}` }</span></el-option><ElSelectLoading:page="selectMoreData.page":loading="selectMoreData.loading":hasMore="selectMoreData.hasMore"@loadMore="handleLoadMore"/></el-select>

script部分

<script lang="ts" setup>
import {ref, reactive, onUnmounted, onMounted, nextTick, computed, watch} from 'vue'
import ElSelectLoading from "@/components/Option/option.vue";
import {useMoreUser} from '@/hooks/useMoreUser.ts'
const {selectMoreData, loadDataList, handleLoadMore} = useMoreUser();const user = ref('');
const remoteMethod = (query: string) => {loadDataList(1, query);
}
</script>

相关文章:

Vue3 + ts+ elementUi 实现后台数据渲染到下拉框选项中,滑动加载更多数据效果

前言 功能需求&#xff1a;下拉框中分页加载后端接口返回的人员数据&#xff0c;实现滑动加载更多数据效果&#xff0c;并且可以手动搜索定位数据&#xff0c;此项目使用Vue3 ts elementUi 实现 实现 把此分页滑动加载数据功能封装成vue中的hooks&#xff0c;文件命名为use…...

Elasticsearch 索引库操作与 Rest API 使用详解

1. 引入 Elasticsearch 依赖 在开始之前&#xff0c;确保你的 Maven 或 Gradle 项目中已经引入了 Elasticsearch 的 Java 客户端库。你可以使用以下 Maven 依赖&#xff1a; xml <dependency> <groupId>org.elasticsearch.client</groupId> <ar…...

线性代数(四)| 解方程 齐次性 非齐次性 扩充问题

文章目录 1 方程解的个数2 解方程步骤2.1 齐次性方程组2.2 非齐次方程组 3 一些扩充问题 系数矩阵 增广矩阵 A m n X B A_{mn}XB Amn​XB 1 方程解的个数 m 代表有m个方程 n代表有n个未知数 系数矩阵的秩与增广矩阵的秩不同 无解 若相同 &#xff0c;如系数矩阵的秩和未知…...

快乐数问题

编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1&#xff…...

8 历史服务器配置

为了查看程序的历史运行情况&#xff0c;需要配置一下历史服务器 1、配置mapred-site.xml vim mapred-site.xml在该文件里面增加如下配置 //原先的配置不用删除 <!-- 历史服务器端地址 --> <property><name>mapreduce.jobhistory.address</name><…...

读书笔记:《精益数据分析》

《精益数据分析 . Lean Analytics Use Data to Build a Better Startup Faster》 加 . 阿利斯泰尔 . 克罗尔 本杰明 . 尤科维奇 著&#xff0c;韩知白 王鹤达 译 2023.7.27 ~ 2023.11.4 本以为是本纯数学的、介绍公式的数据分析用法的书&#xff0c;结果是&#xff1a;…...

酷柚易汛ERP- 组装单与拆卸单操作

1、功能介绍 组装单用来处理企业组装等加工业务&#xff0c;拆卸单用来处理企业拆卸等加工业务&#xff0c;支持一对多的产品加工业务。 2、主要操作 2.1 新增组装单 打开【仓库】-【组装单】新增组装单。 录入组合件与子件&#xff0c;单据审核后&#xff0c;系统根据存货…...

yolov8训练

介绍 训练深度学习模型包括向其提供数据并调整其参数&#xff0c;以便其能够做出准确的预测。Ultralytics YOLOv8中的训练模式旨在充分利用现代硬件功能&#xff0c;对目标检测模型进行有效和高效的训练。本指南旨在涵盖使用YOLOv8强大的一组功能开始训练自己的模型所需的所有细…...

抖音短视频账号矩阵系统、短视频矩阵源码+无人直播源码开发可打包

抖音短视频账号矩阵系统、短视频矩阵源码无人直播源码开发可打包 矩阵系统源码主要有三种框架&#xff1a;Spring、Struts和Hibernate。Spring框架是一个全栈式的Java应用程序开发框架&#xff0c;提供了IOC容器、AOP、事务管理等功能。Struts框架是一个MVC架构的Web应用程序框…...

NI和EttusResearchUSRP设备之间的区别

NI和EttusResearchUSRP设备之间的区别 概述 USRP&#xff08;通用软件无线电外设&#xff09;设备是业界领先的商软件定义无线电&#xff08;SDR&#xff09;。全球数以千计的工程师使用USRPSDR来快速设计、原型设计和部署无线系统。它们以两个不同的品牌进行营销和销售&…...

WPF UI样式介绍

WPF&#xff08;Windows Presentation Foundation&#xff09;是微软的一个用于创建桌面客户端应用程序的UI框架。WPF使用XAML&#xff08;可扩展应用程序标记语言&#xff09;作为其界面设计语言&#xff0c;这使得开发者能够以声明性方式定义UI元素和布局。 在WPF中&#xf…...

【开源】基于Vue.js的校园失物招领管理系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、研究内容2.1 招领管理模块2.2 寻物管理模块2.3 系统公告模块2.4 感谢留言模块 三、界面展示3.1 登录注册3.2 招领模块3.3 寻物模块3.4 公告模块3.5 感谢留言模块3.6 系统基础模块 四、免责说明 一、摘要 1.1 项目介绍 基于Vue…...

计算机视觉中目标检测的数据预处理

本文涵盖了在解决计算机视觉中的目标检测问题时&#xff0c;对图像数据执行的预处理步骤。 首先&#xff0c;让我们从计算机视觉中为目标检测选择正确的数据开始。在选择计算机视觉中的目标检测最佳图像时&#xff0c;您需要选择那些在训练强大且准确的模型方面提供最大价值的图…...

es 查询多个索引的文档

es 查询多个索引 第一种做法&#xff1a; 多个索引&#xff0c;用逗号隔开 GET /book_2020_09,book_2021_09/_search第二种做法&#xff1a; 可以用 * 模糊匹配。。比如 book* &#xff0c;表示查询所有 book开头的 索引。 GET /book*/_search GET /*book*/_search第二种做…...

用java把服务器某个目录日志实时打印出来

1.引入第三方包 <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version> </dependency>2.代码如下 import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.JSch; import …...

金融信贷行业如何准确——大数据精准定位获客渠道

通过大数据精准获客&#xff0c;不仅可以及时拦截网址浏览量&#xff0c;还可以访问移动贷款应用软件的高频活跃客户和新注册客户。此外&#xff0c;通过大数据进行准确的客户获取&#xff0c;还可以获得电话座机号码的实时通信记录&#xff0c;捕捉小程序应用程序和关键词搜索…...

LeetCode 面试题 16.21. 交换和

文章目录 一、题目二、C# 题解 一、题目 给定两个整数数组&#xff0c;请交换一对数值&#xff08;每个数组中取一个数值&#xff09;&#xff0c;使得两个数组所有元素的和相等。 返回一个数组&#xff0c;第一个元素是第一个数组中要交换的元素&#xff0c;第二个元素是第二…...

未来之路:大模型技术在自动驾驶的应用与影响

本文深入分析了大模型技术在自动驾驶领域的应用和影响&#xff0c;万字长文&#xff0c;慢慢观看~ 文中首先概述了大模型技术的发展历程&#xff0c;自动驾驶模型的迭代路径&#xff0c;以及大模型在自动驾驶行业中的作用。接着&#xff0c;详细介绍了大模型的基本定义、基础功…...

Skywalking流程分析_5(字节码增强)

SkyWalkingAgent.Transformer#transform 此方法就是进行字节码增强的过程 private static class Transformer implements AgentBuilder.Transformer {private PluginFinder pluginFinder;Transformer(PluginFinder pluginFinder) {this.pluginFinder pluginFinder;}Override…...

Windows conan环境搭建

Windows conan环境搭建 1 安装conan1.1 安装依赖软件1.1.1 python安装1.1.2 git bash安装1.1.3 安装Visual Studio Community 20191.1.3.1 选择安装的组件1.1.3.2 选择要支持的工具以及对应的SDK 1.1.4 vscode安装 1.3 验证conan功能1.4 查看conancenter是否包含poco包1.5 查看…...

用过才敢说!盘点2026年备受喜爱的的AI论文平台

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文平台&#xff0c;覆盖选题构思、文献整理、内容生成、降重润色等核心场景&#xff0c;帮你高效搞定论文&#xff0c;告别熬夜赶稿&#xff01; 一、全流程王者&#xff1a;一站式搞定论文全链路…...

3个步骤实现微信消息永久保存,高效保护重要沟通记录

3个步骤实现微信消息永久保存&#xff0c;高效保护重要沟通记录 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.com/…...

springboot-vue+nodejs的电子产品商城销售平台

目录技术栈选择系统架构设计核心功能模块开发环境搭建数据库设计接口规范定义安全防护措施性能优化策略测试与部署项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术栈选择 后端采用Spring Boot框架&#xff0c;提供RESTful …...

Kubernetes资源监控与告警:从指标到行动的完整闭环

Kubernetes资源监控与告警&#xff1a;从指标到行动的完整闭环没有监控的集群就是黑盒&#xff0c;没有告警的监控就是摆设。监控体系架构 一个完整的K8s监控体系包含三个层次&#xff1a; ┌────────────────────────────────────────…...

比迪丽FLUX.1效果对比:相比SDXL,面部结构准确率提升18.7%

比迪丽FLUX.1效果对比&#xff1a;相比SDXL&#xff0c;面部结构准确率提升18.7% 1. 引言&#xff1a;当动漫角色遇上新一代AI绘画引擎 如果你是一位《龙珠》的粉丝&#xff0c;或者热衷于用AI生成动漫角色&#xff0c;那么“比迪丽”这个名字你一定不陌生。作为悟饭的妻子&a…...

告别GPU依赖?LocalAI让普通设备玩转本地化AI部署的完整方案

告别GPU依赖&#xff1f;LocalAI让普通设备玩转本地化AI部署的完整方案 【免费下载链接】LocalAI mudler/LocalAI: LocalAI 是一个开源项目&#xff0c;旨在本地运行机器学习模型&#xff0c;减少对云服务的依赖&#xff0c;提高隐私保护。 项目地址: https://gitcode.com/Gi…...

ComfyUI模型管理终极指南:从零基础到高效工作流的完整教程

ComfyUI模型管理终极指南&#xff1a;从零基础到高效工作流的完整教程 【免费下载链接】ComfyUI 最强大且模块化的具有图形/节点界面的稳定扩散GUI。 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI ComfyUI作为最强大且模块化的AI图像生成工具&#xff0c;…...

AI 开发实战:技术支持流程里,怎么让 AI 真正减负

AI 开发实战&#xff1a;技术支持流程里&#xff0c;怎么让 AI 真正减负 一、这个问题为什么值得专门拿出来做&#xff1f; 在 AI 工程落地里&#xff0c;真正拖慢团队的往往不是模型本身&#xff0c;而是流程和协作方式没有跟上。 围绕“技术支持流程里&#xff0c;怎么让 AI …...

赋能工业智能化转型实战案例解析

随着“工业4.0”和智能制造的深入推进&#xff0c;工业生产现场正经历着从“自动化”向“智能化”的深刻转型。在这一进程中&#xff0c;传统的机器视觉&#xff08;MV&#xff09;虽在速度与精度上表现优异&#xff0c;但面对柔性制造、非结构化环境以及复杂多变的任务需求时&…...

3DS原生GBA游戏体验:open_agb_firm完整使用指南

3DS原生GBA游戏体验&#xff1a;open_agb_firm完整使用指南 【免费下载链接】open_agb_firm open_agb_firm is a bare metal app for running GBA homebrew/games using the 3DS builtin GBA hardware. 项目地址: https://gitcode.com/gh_mirrors/op/open_agb_firm 想要…...