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

uniapp封装picker选择器组件,支持关键字查询

CommonPicker.vue组件

路径在 components\CommonPicker.vue

<template><view><uni-easyinput v-model="searchQuery" :placeholder="placeholder" /><picker :range="filteredOptions" :range-key="'text'" v-model="selectedIndex" @change="onPickerChange"><view class="picker">{{ `当前选择: ${selectedText}` }}</view></picker></view>
</template><script>
export default {props: {value: { // v-model 的值 type: [String, Number],default: ''},options: { // 数据来源 格式为 [{value: '1', text: '选项1'}, {value: '2', text: '选项2'}]type: Array,required: true},placeholder: {type: String,default: '筛选'}},data() {return {selectedIndex: 0,selectedText: '',searchQuery: ''};},computed: {filteredOptions() {if (!this.searchQuery) {return this.options;}return this.options.filter(option => option.text.includes(this.searchQuery));}},watch: {value(val) {const index = this.filteredOptions.findIndex(option => option.value === val);if (index !== -1) {this.selectedIndex = index;this.selectedText = this.filteredOptions[index].text;}},options: {immediate: true,handler() {const index = this.filteredOptions.findIndex(option => option.value === this.value);if (index !== -1) {this.selectedIndex = index;this.selectedText = this.filteredOptions[index].text;}}},searchQuery() {this.updateSelectedText();}},methods: {onPickerChange(e) {const index = e.detail.value;const selectedOption = this.filteredOptions[index];this.selectedIndex = index;this.selectedText = selectedOption.text;this.$emit('input', selectedOption.value); // 触发 v-model 绑定的更新},updateSelectedText() {const index = this.filteredOptions.findIndex(option => option.value === this.value);if (index !== -1) {this.selectedIndex = index;this.selectedText = this.filteredOptions[index].text;} else {this.selectedText = '';this.selectedIndex = 0;}}},mounted() {this.updateSelectedText();}
};
</script><style lang="scss" scoped>
.picker {padding: 10px;background-color: #f0f0f0;border-radius: 5px;text-align: left;margin-top: 10px;
}
</style>

在main.js中全局注册

import CommonPicker from '@/components/CommonPicker.vue';
Vue.component('CommonPicker', CommonPicker)

使用

<template><uni-card><CommonPicker v-model="id" :options="options" :placeholder="`筛选`" /></uni-card>
</template><script>
export default {data() {return {options: [{text: '小明',value: "1"}, {text: '小红',value: "2"}, {text: '小王',value: "3"}],id: undefined,}}
}
</script>

相关文章:

  • react快速开始(四)-之Vite 还是 (Create React App) CRA? 用Vite创建项目
  • Docker搭建ELKF日志分析系统
  • GPT-4o:免费且更快的模型
  • C语言 指针——函数指针的典型应用:计算定积分
  • CAD二次开发(8)-探索实现不重启CAD进行热部署代码
  • 算法-分治策略
  • 如何复制文件描述符
  • 解决nvidia驱动和CUDA升级问题
  • for of 和 for in 的区别
  • 二轴机器人大米装箱机:技术创新引领智能包装新潮流
  • 微波电路S参数测量实验方案
  • pyqt5 tablewidget实现excel拖曳填充
  • 关于科技的总结与思考
  • swaggerHole:针对swaggerHub的公共API安全扫描工具
  • 【OPENMV】学习记录 (持续更新)
  • #Java异常处理
  • @jsonView过滤属性
  • Codepen 每日精选(2018-3-25)
  • CODING 缺陷管理功能正式开始公测
  • echarts花样作死的坑
  • emacs初体验
  • ES6--对象的扩展
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • React-flux杂记
  • supervisor 永不挂掉的进程 安装以及使用
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 给第三方使用接口的 URL 签名实现
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何合理的规划jvm性能调优
  • 深度解析利用ES6进行Promise封装总结
  • 使用权重正则化较少模型过拟合
  • 学习HTTP相关知识笔记
  • 异步
  • 因为阿里,他们成了“杭漂”
  • 函数计算新功能-----支持C#函数
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​力扣解法汇总946-验证栈序列
  • #pragma pack(1)
  • (7)STL算法之交换赋值
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (十六)串口UART
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)重识new
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .libPaths()设置包加载目录
  • .Net Core和.Net Standard直观理解
  • .Net Core与存储过程(一)
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。