微信小程序实战:手把手教你打造带搜索功能的选择器组件(附完整代码)

微信小程序实战:手把手教你实现带搜索的下拉选择器(附完整代码) 本文详细介绍了如何在微信小程序中开发一个功能完善的带搜索功能的下拉选择器组件。文章从组件设计、视图构建、核心逻辑实现到页面集成,提供了完整的代码示例,并探讨了性能优化与交互细节,帮助开发者提升用户体验并构建可复用的组件资产。 阅读详情

微信小程序实战:从零构建智能搜索选择器组件

在移动应用开发中,高效的数据选择交互一直是提升用户体验的关键环节。想象一下这样的场景:用户需要从包含数百个选项的列表中快速定位目标项,传统的下拉选择器显然力不从心。这正是搜索选择器组件大显身手的地方——它将搜索功能与传统选择器无缝结合,让用户在庞大数据集中也能轻松导航。

对于微信小程序开发者而言,构建这样一个组件不仅能解决实际问题,更是掌握组件化开发思想的绝佳实践。不同于简单的代码拼凑,一个成熟的搜索选择器需要考虑数据流管理、样式隔离、性能优化等多个维度。本文将带你从设计思路到完整实现,打造一个可直接投入生产环境的智能选择器组件。

1. 组件架构设计与核心逻辑

1.1 组件功能拆解

一个完整的搜索选择器应该包含以下核心功能单元:

  • 输入搜索区:实时响应用户输入的关键词
  • 候选展示区:动态过滤后的可选项目列表
  • 选择确认机制:用户点击后的数据回传
  • 样式自定义能力:适应不同业务场景的UI需求

在微信小程序的自定义组件体系中,这些功能对应着不同的技术实现层面:

Component({
  properties: {
    // 可配置属性
    dataSource: Array,   // 原始数据集合
    placeholder: String, // 输入框提示文本
    stylePreset: String  // 样式预设类型
  },
  data: {
    // 内部状态
    searchText: '',
    filteredData: []
  },
  methods: {
    // 交互处理方法
    handleInput() {...},
    handleSelect() {...}
  }
})

1.2 数据流设计

组件的数据流动遵循单向数据流原则:

  1. 父组件通过properties传入原始数据
  2. 用户输入触发本地过滤逻辑
  3. 选择结果通过自定义事件回传父组件

这种设计确保了组件的纯净性,使其成为真正的"受控组件"。下面是典型的数据处理流程:

graph LR
A[父组件] -->|传递| B[原始数据]
B --> C[本地过滤]
D[用户输入] --> C
C --> E[渲染列表]
E -->|选择| F[事件上报]
F --> A

注意:实际开发中应避免在组件内部修改传入的properties,所有数据变更都应通过setData进行

2. 完整组件实现

2.1 模板结构搭建

WXML结构采用flex布局,确保在不同屏幕尺寸下的自适应表现:

<!-- components/search-picker/index.wxml -->
<view class="search-picker {
  
  {externalClass}}">
  <input 
    class="search-input"
    placeholder="{
  
  {placeholder}}"
    value="{
  
  {searchText}}"
    bindinput="handleInput"
  />
  <view class="dropdown-container" wx:if="{
  
  {showDropdown}}">
    <block wx:for="{
  
  {filteredData}}" wx:key="id">
      <view 
        class="dropdown-item {
  
  {activeIndex === index ? 'active' : ''}}"
        bindtap="handleSelect"
        data-item="{
  
  {item}}"
      >
        {
  
  {item.label}}
      </view>
    </block>
    <view class="empty-tip" wx:if="{
  
  {!filteredData.length}}">
      未找到匹配项
    </view>
  </view>
微信小程序实战:打造高效搜索选择器组件 本文详细介绍了如何在微信小程序中从零开发一个高效的搜索选择器组件。通过分析基础组件搭建、核心功能升级(实现边输入边筛选)、性能优化(如防抖处理)以及高级功能拓展(如拼音搜索),旨在帮助开发者提升用户操作效率与体验,打造更流畅的小程序交互。 阅读详情

相关推荐

微信小程序实战:手把手教你实现带搜索功能的下拉选择器(附完整代码)

本文详细介绍了如何在微信小程序中实现一个带搜索功能的下拉选择器组件。从组件架构设计到核心功能实现,再到高级功能扩展和业务场景应用,提供了完整的代码示例和优化技巧,帮助开发者快速构建高效、用户友好的搜索选择器,提升小程序交互体验。

weixin_28683065的博客 218

【愚公系列】《微信小程序与云开发从入门到实践》016-基础功能组件

在微信小程序的开发旅程中,基础功能组件是构建应用的基石。这些组件不仅提供了常见的用户交互功能,还帮助开发者快速实现丰富的应用场景。无论是按钮、输入框,还是导航栏、列表等,这些基础组件的合理运用都能大大提升用户体验和开发效率。本篇文章将深入探讨微信小程序的基础功能组件,详细介绍它们的特性、使用方法以及最佳实践。我们将结合实际案例,帮助你理解如何灵活运用这些组件,以满足不同的业务需求和用户期望。所谓功能组件,是指为页面提供功能支持的基础组件。通过容器组件将功能组件进行包装即可扩展出更复杂的自定义组件。

愚公智库 16万+

微信小程序:打造高性能树形选择器组件

本文详细介绍了如何在微信小程序中开发高性能树形选择器组件,涵盖基础实现、虚拟滚动、数据扁平化等关键技术,并分享内存优化和渲染性能提升的实战经验,助力开发者解决大数据量下的卡顿问题。

weixin_29021291的博客 383

微信小程序城市选择器实现与优化指南

htmltable {th, td {th {pre {简介:城市选择器是微信小程序中用于地理位置服务筛选和切换的关键组件。本文将详细介绍如何在微信小程序中创建和优化城市选择器。首先,我们将讨论开发环境的设置和新页面的创建。接着,深入探讨使用微信小程序picker组件实现城市选择器的步骤,包括JSON数据结构的准备、数据加载、<picker>标签的配置,以及如何处理用户选中行为。

weixin_42309599的博客 1475

打造微信小程序自定义日历日期选择器

微信小程序,通常被称为“小程”,它是一种不需要下载安装即可使用的应用。具有“无需安装、触手可及、用完即走、无需卸载”的特点。通过微信客户端内的搜索,扫一扫,或是在聊天页面通过聊天信息内的小程序卡片直接启动应用。微信小程序可以实现应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。小程序也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。日历组件在用户界面中扮演着重要的角色,它不仅仅是一个显示日期的工具,更是一个辅助用户进行时间管理和计划排期的重要组成部分。

weixin_30205153的博客 1251

微信小程序打造的外卖点餐系统实战项目

WXSS(WeiXin Style Sheets)类似于CSS,是用于设置微信小程序页面的样式表。它支持大部分CSS属性,并且针对微信环境进行了一些扩展,如rpx单位(响应式像素),可以根据屏幕宽度进行自适应调整。在WXSS中,可以通过类选择器、ID选择器、后代选择器等选择器来定义样式。样式继承、盒模型、布局等概念与CSS相似,但需要注意的是,WXSS的一些属性可能会有特定的行为和限制,尤其是在布局和定位方面。/* 示例:定义页面基础样式 */flex: none;

weixin_42160645的博客 1556

打造家居购物新体验:微信小程序实战项目

微信小程序是一种不需要下载安装即可使用的应用,它实现了“触手可及”的应用体验。小程序可以在微信内被便捷地获取和传播,用户无需关心安装与卸载,减少了用户的使用门槛。微信开发者工具支持开发者自定义开发插件,进一步扩展工具的功能。自定义开发:- 开发者可以使用开发者工具提供的API进行自定义开发。- 自定义插件可以增加工具的新功能,比如自动测试、代码质量检查等。javascript// 示例代码:自定义插件的入口文件// 自定义逻辑。

weixin_30674431的博客 1037

服装行业微信小程序开发实战教程

微信小程序是一种不需要下载安装即可使用的应用,它通过微信这一庞大的用户群体,让开发者能迅速触达数亿潜在用户。微信小程序体现了“触手可及”的理想,用户扫一扫或搜一下即可打开应用。同时,它也践行了“用完即走”的理念,用户不用关心是否安装太多应用的问题。微信小程序自2017年正式上线以来,已成为连接线上线下、提供生活服务的重要平台。它的轻量级特性、便捷的访问方式和微信生态系统内的丰富功能,使得它在短短几年间风靡全国,成为众多开发者关注的焦点。

weixin_35705784的博客 779

微信小程序中下拉选择中带手动输入搜索的实现

微信小程序中下拉选择中带手动输入搜索的实现

微信小程序picker组件下拉框选择input输入框的实例

主要介绍了微信小程序picker组件下拉框选择input输入框的实例的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下

基于GEC6818开发板的C/C++贪吃蛇小游戏

f.开始游戏(进入游戏,并没有马上开游戏,需要点击播放才能开始)2.相关宏,全局变量(可以根据自己需要进行修改)k.显示文字前的相关初始化。k.自定义font.h文件。1.需要的主要头文件。l.在开发板上显示字1。m.在开发板上显示字2。a.显示固定大小图片。h.线程1:获得坐标。

2301_77273301的博客 2133

算法策略 | MACD跨周期短线交易策略开发(股指+商品双版)

量化策略开发,高质量社群,交易思路分享等相关内容

松鼠宽客的博客 2540

深入解析WIFI与蓝牙模块电路设计:从原理到实战

本文深入解析了WIFI与蓝牙模块的电路设计,从核心原理到实战应用。文章以AP6256模块为例,详细拆解了电源树、时钟电路、接口设计及天线射频路径等关键环节,并提供了PCB布局布线的实用准则与调试方法,旨在帮助硬件工程师设计出稳定可靠的无线产品,规避常见陷阱。

weixin_29186249的博客 150

CCS TMSC6748 报错Error connecting to the target: (Error -600 @ 0x0)

CCS TMSC6748 报错Error connecting to the target:(Error -600@ 0x0)

AS_the_deer1717的博客 6637

大模型实战—通义千问大模型微调

这个参数仅针对 llama 类型的模型结构,默认勾选的是 q_proj 和 v_proj,具体的名词不容易理解,我就不多说了,可以简单的认为是对模型的理解能力进行优化,一般这两个就够了。当这个值较高时,适应新任务的能力会增强,但是对基础模型的影响会比较大,有过拟合的风险,尤其是在数据量有限的情况下。为了方便测试,我在云环境也创建了一个镜像,相关的环境都配置好了,可以直接使用几个国内开源的大语言模型,比如清华智谱的ChatGLM3-6B、零一万物的Yi-34B,还有最近阿里云开源的Qwen1.5-32B。

7万+

提高RFID检测距离以及检测速度的方法总结

摘要:提高RFID检测距离需优化阅读器功率、标签灵敏度、天线设计及频段选择,同时减少环境干扰;提升检测速度则需改进防碰撞算法、增强并行处理能力、精简数据传输。实际应用需平衡两者关系,如物流仓储采用UHF频段、高增益天线和动态Q算法实现远距离高速读取,ETC系统则通过微波频段和高速调制实现超远距离快速识别。不同场景需针对性优化硬件配置和系统参数。

start_up_go的博客 293

面向元数据的 SAP UI 中枢:namespace sap.ui.mdc 全景解析

如果把应用前端比作一条数据到交互的装配线,sap.ui.mdc 就是那条线的标准化工装:以 PropertyInfo 描述原料,以 Delegate 定义装配方法,以 p13n 与 VariantManagement 交付面向个体的最终产物;而 Condition Model、Operator 与 ValueHelp 则让输入与筛选的语义落地。与 OData V4 服务与 Fiori Elements 宏构件组合使用时,它能在保持一致体验的同时,给自由式开发者留下足够的可编排空间。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 240

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 从DQN到Rainbow:一文搞懂强化学习中的六大改进技术(附代码对比)
下一篇: CentOS 7下openGauss极简版安装全流程(附常见错误排查)
git9versioner
博客等级 码龄4年 75粉丝 1650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值