uniapp实现的数据选择器,支持H5、微信小程序

采用uniapp-vue3实现的数据选择器,支持H5、微信小程序(其他小程序未测试过,可自行尝试)

  • 支持本地自定义过滤、远程接口过滤,
  • 为了避免弹窗面板超出边界的情况,自动计算弹窗面板安置的位置(在微信小程序,节点信息是页面渲染后才拿得到,所以会有一段位移过程,大神如果更合适的方案,可以自行优化)
  • 支持自定义弹窗面板显示内容
  • 支持自定义取值字段(默认为options: [{label:‘键’, value: ‘值’, …}]格式)

由于移动端输入场景下会弹出键盘,如果设置为失焦时关闭弹窗面板, 则收起键盘时,弹窗就会被关闭,无法再进行下一步选择。所以采用弹窗常驻,手动点击右边图标关闭弹窗的方式

可到插件市场下载尝试: https://ext.dcloud.net.cn/plugin?id=17287

  • 使用示例

H5示例
在这里插入图片描述
微信小程序示例
在这里插入图片描述

props属性

id

组件唯一标识

同个页面存在多个wo-select组件的情况,id为必填项,因为需要通过id去计算弹窗面板与输入框的位置,以便安置弹窗面板在合适的位置,避免超出边界

id: {type: String,default: 'inputId',reqiured: true
},

value

默认值(valueField字段指定的字段值)

value: {type: String || Number,default: null
},

options

结构化数据

options: {type: Array,default: () => []
},

placeholder

占位描述

placeholder: {type: String,default: '请选择数据'
},

labelField

选中后输入框显示的值的取值字段

labelField: {type: String,default: 'label'
},
如果 options = [{ name: '按钮1', id: 1}, { name: '按钮2', id: 2 }]; labelField = 'name'
则选中后,输入框中则显示name字段的值

valueField

选中值的取值字段

valueField: {type: String,default: 'value'
}
如果 options = [{ name: '按钮1', id: 1}, { name: '按钮2', id: 2 }]; valueField = 'id'
则选中值就是id字段的值

事件

@filter

过滤事件,支持本地过滤、远程过滤等

@on-change

选中后返回值,值为valueField配置的字段值

示例

<template><view class="content"><view class="card"><view class="title">默认样式</view><view><wo-selectclass="white-select":id="'inputOne'":options="state.data":label-field="'label'":value-field="'value'"@filter="onFilter"@on-change="onChangeStaff1"></wo-select></view><view class="title">选中值为:{{ state.res1 }}</view></view><view class="card"><view class="title">设置初始值</view><view><wo-selectclass="white-select":id="'inputTwo2'":value="'2'":options="state.data":label-field="'label'":value-field="'value'"@filter="onFilter"@on-change="onChangeStaff2"></wo-select></view><view class="title">选中值为:{{ state.res2 }}</view></view><view class="card"><view class="title">自定义面板</view><view><wo-selectclass="white-select"ref="selectorRef1":id="'inputTwo1'":options="state.data":label-field="'label'":value-field="'value'"@filter="onFilter"@on-change="onChangeStaff3"><view style="display: flex; flex-direction: column; gap: 20rpx"><view style="display: flex; justify-content:center">这是头部</view><viewv-for="item in state.data":key="item.value"style="font-size: 24rpx; z-index: 120; display: flex; justify-content: space-between;"@click="selectorRef1.onClickSelect(item)"><view style="width: 200px;">{{ item.label }}</view><view style="background-color: dodgerblue; color: white; padding: 4px 8px;border-radius: 8rpx;">{{ item.category }}</view></view></view></wo-select></view><view class="title">选中值为:{{ state.res3 }}</view></view><view class="card dark"><view class="title" style="color: white">暗黑样式</view><view><wo-selectclass="dark-select"ref="selectorRef":id="'inputTwo'":options="state.data":label-field="'label'":value-field="'value'"@filter="onFilter"@on-change="onChangeStaff4"><view style="display: flex; flex-direction: column; gap: 20rpx"><viewv-for="item in state.data":key="item.value"style="font-size: 24rpx; z-index: 120; display: flex; justify-content: space-between;"@click="selectorRef.onClickSelect(item)"><view style="width: 200px;">{{ item.label }}</view><view style="background-color: dodgerblue; color: white; padding: 4px 8px;border-radius: 8rpx;">{{ item.category }}</view></view></view></wo-select></view><view class="title" style="color: white;">选中值为:{{ state.res4 }}</view></view><view class="flex-center">内容区</view><view class="card"><view class="title">面板位置自动调整</view><view><wo-selectclass="white-select":id="'inputThree'":placeholder="'输入过滤'":options="state.data":label-field="'label'":value-field="'value'"@filter="onFilter"@on-change="onChangeStaff5"></wo-select></view><view class="title">选中值为:{{ state.res5 }}</view></view><view class="flex-center">内容区</view></view>
</template><script setup lang="ts">import { reactive, ref } from 'vue'const selectorRef1 = ref()const selectorRef = ref();const state = reactive({data: [{label: '哈墨的脑袋',value: '1',category: '正常'},{label: '摩西女神的手臂',value: '2',category: '异常'},{label: '奥尔墨的铠甲',value: '3',category: '维修中'},{label: '摩西女神的翅膀',value: '4',category: '正常'},{label: '战神瑞尔的斧头',value: '5',category: '正常'},{label: '丘比特的箭头',value: '6',category: '异常'},{label: '雅典娜的光明盾',value: '7',category: '异常'}] as any[],userOptions: [] as any[],res1: '',res2: '',res3: '',res4: '',res5: '',})// 克隆一份数据,用于过滤筛选state.userOptions = JSON.parse(JSON.stringify(state.data))const onFilter = (e: any) => {state.data = state.userOptions.filter((res) => {return res.label.indexOf(e.detail.value) !== -1});};const onChangeStaff1 = (e: any) => {state.res1 = e};const onChangeStaff2 = (e: any) => {state.res2 = e};const onChangeStaff3 = (e: any) => {state.res3 = e};const onChangeStaff4 = (e: any) => {state.res4 = e};const onChangeStaff5 = (e: any) => {state.res5 = e};
</script><style scoped>.content {width: 100%;font-size: 28rpx;}.card {padding: 20px;}.dark {background-color: black;}.dark-select {color: white;}.title {font-weight: 600;font-size: 24rpx;padding-bottom: 10rpx;}:deep .dark-select .panel {background-color: black;}.box {padding: 20px;}.flex-center {display: flex;justify-content: center;align-items: center;height: 600px;background: #666;}
</style>

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

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

相关文章

对 CSS 工程化的理解

CSS 工程化是为了解决以下问题&#xff1a; 宏观设计&#xff1a;CSS 代码如何组织、如何拆分、模块结构怎样设计&#xff1f;编码优化&#xff1a;怎样写出更好的 CSS&#xff1f;构建&#xff1a;如何处理我的 CSS&#xff0c;才能让它的打包结果最优&#xff1f;可维护性&a…

OpenMV与STM32之间的通信(附源码)

本篇文章旨在记录我电赛期间使用openmv和stm32单片机之间进行串口通信&#xff0c;将openmv识别到的坐标传输给单片机。背景是基于2023年全国大学生电子设计大赛E题&#xff1a;舵机云台追踪识别。 单片机的串口通信原理我便不再详细讲解&#xff0c;下面直接上代码分析。 值得…

wireshark创建显示过滤器实验简述

伯克利包过滤是一种在计算机网络中进行数据包过滤的技术&#xff0c;通过在内核中插入过滤器程序来实现对网络流量的控制和分析。 在数据包细节面板中创建显示过滤器&#xff0c;显示过滤器可以在wireshark捕获数据之后使用。 实验拓扑图&#xff1a; 实验基础配置&#xff1…

HTML input 实现回车切换到下一个输入框功能

前言 遇到需求&#xff0c;在客户填写单子时&#xff0c;有多个输入框&#xff0c;为了省事&#xff0c;不需要频繁移动光标填写。 实现效果 实现方式一 HTML <input type"text" name"serialNumber1" onkeydown"cursor(this);"/><in…

阿里云魔搭发起“ModelScope-Sora开源计划”,将为中国类Sora模型开发提供一站式工具链

在2024年3月23日的全球开发者先锋大会上&#xff0c;阿里云的魔搭社区宣布了一个新计划&#xff1a;“ModelScope-Sora开源计划”。这个计划旨在通过开源方式&#xff0c;帮助中国在Sora模型类型上做出更多创新。这个计划提供了一整套工具&#xff0c;包括处理数据的工具、多模…

Web开发-Django学习笔记

客户端如何获取服务端的数据信息&#xff1f; 通常 是 HTTP网络协议&#xff0c;通过网络传输数据信息。 客户端通过HTTP协议发送请求信息给服务端&#xff0c;并从服务端接收响应信息。 Web 前端开发&#xff1a; &#xff08;HTML、CSS、JS&#xff09;文件部署在后端服务…

Vidmore Video Fix for Mac 视频修复工具

Vidmore Video Fix for Mac是一款功能强大且易于使用的视频修复工具&#xff0c;专为Mac用户设计。它凭借先进的视频修复技术&#xff0c;能够帮助用户解决各种视频问题&#xff0c;如视频文件损坏、无法播放、格式不支持等。 软件下载&#xff1a;Vidmore Video Fix for Mac v…

QT资源添加调用

添加资源文件&#xff0c;新建资源文件夹&#xff0c;命名resource&#xff0c;然后点下一步&#xff0c;点完成 资源&#xff0c;右键add Prefix 添加现有文件 展示的label图片切换 QLabel *led_show; #include "mainwindow.h" #include<QLabel> #include&l…

67、yolov8目标检测和旋转目标检测算法部署Atlas 200I DK A2开发板上

基本思想&#xff1a;需求部署yolov8目标检测和旋转目标检测算法部署atlas 200dk 开发板上 一、转换模型 链接: https://pan.baidu.com/s/1hJPX2QvybI4AGgeJKO6QgQ?pwdq2s5 提取码: q2s5 from ultralytics import YOLO# Load a model model YOLO("yolov8s.yaml")…

Spring-01

Spring 1.Spring是什么? spring是一个开源的Java应用框架&#xff0c;它提供了一套全面的基础设施支持 2.Spring框架的主要特点 1&#xff09;依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09; 2&#xff09;面向切面编程&#xff08;AOP&#xff09…

如何使用剪映专业版剪辑视频

1.操作界面功能介绍 2.时间线的使用 拖动前端后端缩减时长&#xff0c;有多个素材可以拖动调节前后顺序拼接。 分割视频 删除

C语言最大公约数(辗转相除法)

输入两个整数&#xff0c;求他们的最大公约数&#xff1a; 如果我们不用辗转相除法的话&#xff0c;两个整数的最大公约数&#xff0c;我们就可以定义一个整数为两个整数中最小的那个数&#xff0c;然后两个整数一起除我们新定义的整数&#xff0c;如果都除尽了&#xff0c;这…

淘宝商品采集API商品详情数据接口商品搜索列表API接口

淘宝商品采集API、商品详情数据接口以及商品搜索列表API接口是淘宝开放平台提供的一系列接口&#xff0c;旨在帮助开发者更高效地获取淘宝平台上的商品信息。以下是对这些接口的基本介绍和使用方法&#xff1a; 请求示例&#xff0c;API接口接入Anzexi58 一、淘宝商品采集API …

Linux 环境安装 Elasticsearch 8.X

安装前说明 首先确定操作系统&#xff0c;在Linux发行版上执行uname -a查看具体系统。我是Ubuntu系统&#xff0c;可以用直接用apt-get安装&#xff0c;也可以下载tar.gz包手动安装。使用apt-get安装更方便快速&#xff0c;但不同的文件会被安装到不同的目录&#xff0c;不方便…

OSCP靶场--RubyDome

OSCP靶场–RubyDome 考点(CVE-2022-25765 suid ruby提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV 192.168.249.22 --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-29 00:28 EDT Nmap scan report for 192.168.249.22 Hos…

实时渲染是什么意思?实时渲染和离线渲染的区别

一、实时渲染是什么意思&#xff1f; 实时渲染是指在计算机程序运行时即时地生成图像和动画的过程&#xff0c;这种渲染技术通常用于网络游戏、虚拟现实和增强现实等需要实时交互的XR应用中。实时渲染需要在每秒内渲染数百万到数十亿个像素&#xff0c;以呈现出平滑的动画和交…

深入并广泛了解Redis常见的缓存使用问题

Redis 作为一门主流技术&#xff0c;缓存应用场景非常多&#xff0c;很多大中小厂的项目中都会使用redis作为缓存层使用。 但是Redis作为缓存&#xff0c;也会面临各种使用问题&#xff0c;比如数据一致性&#xff0c;缓存穿透&#xff0c;缓存击穿&#xff0c;缓存雪崩&#…

39.基于SpringBoot + Vue实现的前后端分离-无人智慧超市管理系统(项目 + 论文PPT)

项目介绍 随着互联网时代的发展&#xff0c;传统的线下管理技术已无法高效、便捷的管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;国家在环境要求不断提高的前提下&#xff0c;无人智慧超市管理系统建设也逐渐进入了信…

AI新工具 小模型也有大智慧Qwen1.5-MoE;大模型动态排行榜;马斯克更新Grok-1.5

✨ 1: Qwen1.5-MoE 阿里巴巴一款小型 MoE 模型&#xff0c;只有 27 亿个激活参数&#xff0c;但性能与最先进的 7B 模型&#xff08;如 Mistral 7B 和 Qwen1.5-7B&#xff09;相匹配。 Qwen1.5-MoE是一个使用混合专家模型&#xff08;Mixture-of-Experts&#xff0c;MoE&…

小型分布式文件存储系统GoFastDfs应用简介

前言 最近稍微留意了一下各个文件存储系统的协议&#xff0c;发现minio是LGPLV3, 而fastdfs 是GPL3,这些协议其实对于商业应用是一个大坑。故而寻找一些代替品。 go-fastdfs就是其中之一&#xff0c;官网在&#xff1a; go-fastdfs 具体应用 其实可以直接查看官网教程的。 下…