小程序实战之搜索框组件的封装与模糊搜索的实现

简介: 点击搜索框,跳转到搜索页,输入搜索词,可以获取到相关信息并渲染,从设计上来讲,整个需求需要拆分为两个核心步骤即搜索框组件封装与模糊搜索,下面将从这两部分来讲。

1.webp.jpg

如上图功能所示,点击搜索框,跳转到搜索页,输入搜索词,可以获取到相关信息并渲染,从设计上来讲,整个需求需要拆分为两个核心步骤即搜索框组件封装模糊搜索,下面将从这两部分来讲。

搜索框组件

由于需要搜索框复用,所以需要封装一个搜索框组件,下面从组件属性,图标适配,控制跳转与输入,清空与搜索内容四个方面来拆解搜索框组件的封装

组件的属性

从功能上考虑组件需要一个文本提示属性,初始内容属性与读写控制属性,分别对应placeholder,valuereadOnly

placeholder: {
      type: String,
      value: '请输入搜索内容',
    },
    value: {
      type: String,
      value: ''
    },
    readOnly: {
      type: Boolean,
      value: false
    }
复制代码

图标适配

为了使搜索图标的大小能够适配各种机型,所以在组件attached生命周期中通过wx.getSystemInfoSync().screenWidth获取当前机型的屏幕宽度,再进行一个比例的计算,得到适合当下的搜索图标大小,最后再通过getApp()设置到全局变量中。

let _screenWidth = wx.getSystemInfoSync().screenWidth;
      this.setData({
        iconSize: Math.round(_screenWidth / 750 * 25)
      });
      const app = getApp();
      this.setData({
              season:app.globalData.season
      })    
复制代码

控制跳转事件

通过设置组件的属性值,来对点击跳转进行可控。

// 组件内触发属性事件
_readOnly: function () {
      this.triggerEvent('readOnlyEle')
    }
复制代码

之后在应用页进行一个事件绑定即可

<search readOnly="true" bind:readOnlyEle="goSearch" />
复制代码

其中在组件还需要只读属性,在作为装饰即点击跳转组件的时候将只读属性设置为false

输入,清空与搜索内容

输入内容需要将输入框内容设置子组件数据并将该数据通过triggerEvent进行组件传值,将数据传入父组件中

let _value = e.detail.value;
      this.setData({
        value: _value
      });
      this.triggerEvent('input', {
        value: _value
      });
复制代码

在搜索完后想要再次搜索需要考虑将内容清空,所以在点击清空叉号后触发清空事件,将子组件和父组件的数据清空。

_searchClear: function (e) {
      this.setData({
        value: ''
      });
      this.triggerEvent('clear', {});
    },
复制代码

搜索在子组件通过传值方式触发父组件的搜索函数,将搜索内容解构出来并判断内容是否为空。

_searchConfirm: function (e) {
      let { value } = this.data;
      if (!value) return false
      this.triggerEvent('search', { value });
    },
复制代码

模糊搜索

小程序使用的是云开发,所以封装了一个搜云函数,核心的模糊搜索实现如下

let config = index != 1 ?
      {
        title: db.RegExp({
          regexp: content,//miniprogram做为关键字进行匹配
          options: 'i',//不区分大小写
        })
      } : {
        name: db.RegExp({
          regexp: content,//miniprogram做为关键字进行匹配
          options: 'i',//不区分大小写
        })
      }
    db.collection(types[index]).where(config).get().then((res) => {
      let { data } = res;
      if (data.length) result[types[index]] = data;
      resolve(recursion(content, result, types, index + 1));
    });
复制代码

将传入的参数通过对象的形式封装起来,并赋于regexp属性用来匹配结果,最后通过db.collection调用在库中匹配搜索即完成模糊搜索功能



相关文章
|
4月前
|
缓存 小程序 前端开发
商城/点餐/家政类小程序源码合集_微信抖音小程序源码开发从入门到精通实战
本文系统讲解如何利用现有源码快速开发商城、点餐、家政类微信/抖音小程序,涵盖环境搭建、核心功能实现、多平台部署与优化,提供完整技术方案。实战导向,助力开发者高效入门与落地。
|
4月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
8月前
|
JSON 监控 小程序
微信百度字节小程序包过大解决方案(实战经验总结)-优雅草卓伊凡|果果|小无
微信百度字节小程序包过大解决方案(实战经验总结)-优雅草卓伊凡|果果|小无
842 14
微信百度字节小程序包过大解决方案(实战经验总结)-优雅草卓伊凡|果果|小无
|
11月前
|
人工智能 自然语言处理 小程序
让小程序拥有“视觉之眼“:DeepSeek图像识别实战指南
本文介绍如何通过DeepSeek计算机视觉技术,赋予小程序“看懂世界”的能力。从构建视觉感知系统、训练专属视觉词典到创造会思考的界面,详细讲解了实现智能相册、植物识别器和老旧照片修复等功能的步骤。最后探讨性能优化与安全合规要点,展望未来视觉智能应用的无限可能。
|
小程序 数据可视化 JavaScript
微信小程序:轻松实现时间轴组件
本文介绍了如何在微信小程序中实现一个可视化时间轴组件。该组件适用于展示用户资金流动、投资结算等时间节点,帮助用户直观了解资金去向。时间轴支持自定义节点形状、显示序号、倒序排列等功能,并通过插槽灵活定义动态内容。文中详细介绍了组件的设计与使用方法,以及如何结合动态 slot 实现自定义操作。该组件为展示用户资金信息提供了美观、易用的解决方案。
641 1
微信小程序:轻松实现时间轴组件
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
292 0
在线课堂+工具组件小程序uniapp移动端源码
|
小程序 机器人 开发者
QQ 小程序已发布,但无法被搜索的解决方案
我的 QQ 小程序在 2024 年 8 月就已经审核通过,上架后却一直无法被搜索到。打开后,再在 QQ 上下拉查看 “最近使用”,发现他出现一下又马上消失。
249 2
|
小程序
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
2347 1
|
JavaScript 小程序 开发者
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
2242 0
|
12月前
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
547 0