基于elementui的远程搜索下拉选择分页组件

在开发一个练手项目的时候,需要一个远程搜索的下拉选择组件;
elementui自带的el-select支持远程搜索;但如果一次性查询的数据过多;会导致卡顿。故自己实现一个可分页的远程下拉选择组件
效果:
在这里插入图片描述
代码:

<template><el-selectv-model="selectedValue"filterableremotereserve-keywordplaceholder="请输入关键词":remote-method="remoteSearch":loading="loading"@change="handleChange"@focus="handleFocus"@clear="handleClear"clearable><el-optionv-for="item in options":key="item[keyField]":label="item[labelField]":value="item[valueField]"/><div class="select-footer" v-if="total > 0"><div class="total-count">{{ total }}</div><div class="select-pagination" v-if="total > pageSize"><el-paginationsmalllayout="prev, pager, next":total="total":page-size="pageSize":current-page.sync="currentPage"@current-change="handlePageChange"/></div></div></el-select>
</template><script>
import request from '@/utils/request'export default {name: 'RemoteSearchSelect',props: {value: {type: [String, Number],default: ''},apiUrl: {type: String,required: true},// 自定义字段映射labelField: {type: String,default: 'label'},valueField: {type: String,default: 'value'},keyField: {type: String,default: 'id'},// 请求参数自定义searchParamName: {type: String,default: 'keyword'},pageParamName: {type: String,default: 'pageNum'},pageSizeParamName: {type: String,default: 'pageSize'},// 响应数据结构配置responseListField: {type: String,default: 'list'},responseTotalField: {type: String,default: 'total'},// 额外的请求参数extraParams: {type: Object,default: () => ({})}},data() {return {selectedValue: this.value,options: [],loading: false,currentPage: 1,pageSize: 10,total: 0,keyword: '',isFirstFocus: true,selectedOption: null}},created() {this.remoteSearch('');},methods: {async remoteSearch(query) {this.loading = truethis.keyword = querytry {const params = {[this.searchParamName]: query,[this.pageParamName]: this.currentPage,[this.pageSizeParamName]: this.pageSize,...this.extraParams}// 使用配置的响应数据字段const responseData = await request({url: this.apiUrl,method: 'post',data: params})this.options = responseData[this.responseListField] || []this.total = responseData[this.responseTotalField] || 0} catch (error) {console.error('搜索出错:', error)this.$message.error('搜索失败,请重试')} finally {this.loading = false}},handleChange(value) {this.selectedOption = this.options.find(item => item[this.valueField] === value)this.$emit('input', value)this.$emit('change', value)this.$emit('select', this.selectedOption)},handleFocus() {// 如果是首次点击或当前没有选项,则执行搜索this.remoteSearch(this.keyword)this.isFirstFocus = false},handleClear() {this.selectedValue = ''this.keyword = ''this.selectedOption = nullthis.$emit('input', '')this.$emit('change', '')this.$emit('select', null)this.remoteSearch('')},async handlePageChange(page) {this.currentPage = pageif (this.keyword) {await this.remoteSearch(this.keyword)}}},watch: {value: {handler(newVal) {this.selectedValue = newVal},immediate: true}}
}
</script><style scoped>
.select-footer {padding: 8px;border-top: 1px solid #EBEEF5;display: flex;align-items: center;justify-content: space-between;
}.total-count {color: #909399;font-size: 12px;padding-left: 8px;
}:deep(.el-pagination) {padding: 0;margin-left: 8px;
}
</style>

用法

<remote-search-selectv-model="assignForm.ownerId"api-url="remoteUrl"label-field="label"value-field="value"key-field="id"search-param-name="childName"response-list-field="rows"response-total-field="total"@select="handleProxyerSelectChange"/>

参数介绍:

参数说明
v-model绑定的data数据
api-url远程查询的数据接口路径,方法名,请求方式为post
label-field需要展示的名称属性名
value-field下拉值的属性名
key-field主键的属性名
search-param-name模糊搜索的参数的字段名
response-list-field返回list的属性名
response-total-field返回list的总数的属性名
@selectfuntion,接收选中的值

组件可根据自己的具体需求做源码修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

告别充电焦虑:移动充电机器人的革命性解决方案

移动充电机器人作为新能源汽车领域的黑科技&#xff0c;正逐渐崭露头角。它的出现为电动汽车充电带来了全新的解决方案&#xff0c;解决了传统充电方式的诸多痛点。 新能源汽车具有诸多优点&#xff0c;如科技含量高、噪音小、使用成本低等&#xff0c;但 “续航焦虑”“充电焦…

Socket 编程预备

目录 理解源 IP 地址和目的 IP 地址 认识端口号 端口号范围划分 理解 "端口号" 和 "进程 ID" 理解源端口号和目的端口号 理解 socket 传输层的典型代表 认识 TCP 协议 认识 UDP 协议 网络字节序 socket 编程接口 socket 常见 API sock…

17. Threejs案例-Three.js创建多个立方体

17. Threejs案例-Three.js创建多个立方体 实现效果 知识点 WebGLRenderer (WebGL渲染器) WebGLRenderer 是 Three.js 中用于渲染 WebGL 场景的核心类。它负责将场景中的对象渲染到画布上。 构造器 new THREE.WebGLRenderer(parameters) 参数类型描述parametersObject可选…

实例教程:BBDB为AHRS算法开发提供完善的支撑环境(下)

4. BBDB基础上为算法实现提供支撑方式二&#xff1a;算法层实现 第2节内容当中讲述在应用层实现AHRS的步骤&#xff0c;这种方法优点在于实现方法比较简单明了。但是缺点在于程序代码的组织算不上很好&#xff0c;AHRS算法代码与PH47框架代码间存在一定的耦合度&#xff0c;会…

Android开发,使用ViewPager2实现自动轮播图

文章目录 1. build.gradle添加依赖&#xff1a;2. AndroidManifest.xml中添加网络访问权限3. 编写 布局文件4. 编写Banner适配器5. 自定义Banner视图6. 定义圆点指示器的drawable资源7. 在需要使用轮播图中的Activity中使用8. 运行效果图9. 视频教程 在Android项目程序设计中&a…

企业网双核心交换机实现冗余和负载均衡(MSTP+VRRP)

MSTP&#xff08;多生成树协议&#xff09; 通过创建多个VLAN实例&#xff0c;将原有的STP、RSTP升级&#xff0c;避免单一VLAN阻塞后导致带宽的浪费&#xff0c;通过将VLAN数据与实例绑定&#xff0c;有效提升网络速率。 VRRP&#xff08;虚拟路由冗余协议&#xff09; 用…

Socket编程-tcp

1. 前言 在tcp套接字编程这里&#xff0c;我们将完成两份代码&#xff0c;一份是基于tcp实现普通的对话&#xff0c;另一份加上业务&#xff0c;client输入要执行的命令&#xff0c;server将执行结果返回给client 2. tcp_echo_server 与udp类似&#xff0c;前两步&#xff1…

15分钟训练数字人MimicTalk

只需15分钟&#xff0c;就能训练高质量&#xff0c;个性化数字人大模型。由浙江大学与字节跳动联合推出MimicTalk算法&#xff0c;目前已开源。 在外表和说话风格上和真人相似。将通用3D数字人大模型适应到单个目标人&#xff0c;采用动静结合的高效微调方案&#xff0…

【kettle】mysql数据抽取至kafka/消费kafka数据存入mysql

目录 一、mysql数据抽取至kafka1、表输入2、json output3、kafka producer4、启动转换&#xff0c;查看是否可以消费 二、消费kafka数据存入mysql1、Kafka consumer2、Get records from stream3、字段选择4、JSON input5、表输出 一、mysql数据抽取至kafka 1、表输入 点击新建…

在 MacOS 上为 LM Studio 更换镜像源

在 MacOS 之中使用 LM Studio 部署本地 LLM时&#xff0c;用户可能会遇到无法下载模型的问题。 一般的解决方法是在 huggingface.co 或者国内的镜像站 hf-mirror.com 的项目介绍卡页面下载模型后拖入 LM Studio 的模型文件夹。这样无法利用 LM Studio 本身的搜索功能。 本文将…

vue中.sync修饰符的用法

一、什么是.sync修饰符 在Vue.js中&#xff0c;.sync 修饰符用于创建一个双向绑定的 prop。它使子组件能够更新父组件的 prop 值&#xff0c;实现父子组件之间的双向数据同步。具体来说&#xff0c;.sync 修饰符主要有以下几个功能&#xff1a; 简化双向绑定&#xff1a; 使用…

【附源码】基于环信鸿蒙IM SDK实现一个聊天Demo

项目背景 本项目基于环信IM 鸿蒙SDK 打造的鸿蒙IM Demo&#xff0c;完全适配HarmonyOS NEXT系统&#xff0c;实现了发送消息&#xff0c;添加好友等基础功能。代码开源&#xff0c;功能简洁&#xff0c;如果您有类似开发需求可以参考。 源码地址&#xff1a;https://github.c…

SHELL----正则表达式

一、文本搜索工具——grep grep -参数 条件 文件名 其中参数有以下&#xff1a; -i 忽略大小写 -c 统计匹配的行数 -v 取反&#xff0c;不显示匹配的行 -w 匹配单词 -E 等价于 egrep &#xff0c;即启用扩展正则表达式 -n 显示行号 -rl 将指定目录内的文件打…

Can‘t find variable: token(token is not defined)

文章目录 例子 1&#xff1a;使用 var例子 2&#xff1a;使用 let 或 const例子 3&#xff1a;异步操作你的代码中的情况 Cant find variable: tokentoken is not defined源代码 // index.jsPage({data: {products:[],cardLayout: grid, // 默认卡片布局为网格模式isGrid: tr…

【AI系统】GhostNet 系列

GhostNet 系列 本文主要会介绍 GhostNet 系列网络&#xff0c;在本文中会给大家带来卷积结构的改进方面的轻量化&#xff0c;以及与注意力(self-attention)模块的进行结合&#xff0c;部署更高效&#xff0c;更适合移动计算的 GhostNetV2。让读者更清楚的区别 V2 与 V1 之间的…

YOLOv8改进,YOLOv8引入CARAFE轻量级通用上采样算子,助力模型涨点

摘要 CARAFE模块的设计目的是在不增加计算复杂度的情况下,提升特征图的质量,特别是在视频超分辨率任务中,提升图像质量和细节。CARAFE结合了上下文感知机制和聚合特征的能力,通过动态的上下文注意力机制来提升细节恢复的效果。 理论介绍 传统的卷积操作通常依赖于局部区域…

大型制造企业IT蓝图、信息化系统技术架构规划与实施路线方案

关注 获取ppt​​​​​​全文&#xff0c;请关注作者

HTTP 长连接(HTTP Persistent Connection)简介

HTTP长连接怎么看&#xff1f; HTTP 长连接&#xff08;HTTP Persistent Connection&#xff09;简介 HTTP 长连接&#xff08;Persistent Connection&#xff09;是 HTTP/1.1 的一个重要特性&#xff0c;它允许在一个 TCP 连接上发送多个 HTTP 请求和响应&#xff0c;而无需为…

001集—— 创建一个WPF项目 ——WPF应用程序入门 C#

本例为一个WPF应用&#xff08;.NET FrameWork&#xff09;。 首先创建一个项目 双击xaml文件 双击xaml文件进入如下界面&#xff0c;开始编写代码。 效果如下&#xff1a; 付代码&#xff1a; <Window x:Class"WpfDemoFW.MainWindow"xmlns"http://schema…

微信小程序配置less并使用

1.在VScode中下载Less插件 2.在微信小程序中依次点击如下按钮 选择 从已解压的扩展文件夹安装… 3.选中刚在vscode中下载安装的插件文件 如果没有修改过插件的安装目录&#xff0c;一般是在c盘下C:\用户\用户名.vscode\extensions\mrcrowl.easy-less-2.0.2 我的路径是&#xf…