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

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

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调用在库中匹配搜索即完成模糊搜索功能



相关文章
|
1月前
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
39 0
在线课堂+工具组件小程序uniapp移动端源码
|
1月前
|
小程序 机器人 开发者
QQ 小程序已发布,但无法被搜索的解决方案
我的 QQ 小程序在 2024 年 8 月就已经审核通过,上架后却一直无法被搜索到。打开后,再在 QQ 上下拉查看 “最近使用”,发现他出现一下又马上消失。
46 2
|
2月前
|
小程序 数据可视化 JavaScript
微信小程序:轻松实现时间轴组件
本文介绍了如何在微信小程序中实现一个可视化时间轴组件。该组件适用于展示用户资金流动、投资结算等时间节点,帮助用户直观了解资金去向。时间轴支持自定义节点形状、显示序号、倒序排列等功能,并通过插槽灵活定义动态内容。文中详细介绍了组件的设计与使用方法,以及如何结合动态 slot 实现自定义操作。该组件为展示用户资金信息提供了美观、易用的解决方案。
74 1
微信小程序:轻松实现时间轴组件
|
2月前
|
小程序
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
670 1
|
2月前
|
小程序 搜索推荐 API
微信小程序:自定义关注公众号组件样式
尽管关注公众号组件的样式固定且不可修改,但产品经理的需求却需要个性化的定制。在这种情况下,我们需要寻找解决方案,以满足这些特殊需求,尽管这可能有点棘手。
83 0
微信小程序:自定义关注公众号组件样式
|
2月前
|
小程序 前端开发 JavaScript
微信小程序图表制作利器:ECharts组件的使用与技巧
微信小程序图表制作利器:ECharts组件的使用与技巧
86 1
|
2月前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
261 1
|
2月前
|
JavaScript 小程序 开发者
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
516 0
|
2月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
373 3
|
2月前
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
60 0
微信小程序更新提醒uniapp

热门文章

最新文章