小程序开发之搜索框

2023-11-04

日常学习之小程序开发——搜索框

为了完成搜索框 我们先在 pages 文件夹中创建 search 文件并创建相应的 page

在这里插入图片描述
在这里插入图片描述
搜索框 可以用 vant 组件中的 van-search 标签来实现 需要在 miniprogram 文件夹的内建终端中下载

1. 用npm init -y 初始化
	就会在miniprogram文件夹中出现package-lock.json文件
2. 用npm i @vant/weapp -S下载
	就会在miniprogram文件夹中出现node_modules文件夹
3. 在右上角的详情的本地设置中勾选使用npm模块
4. 在工具中点击构建npm
	就会miniprogram文件夹中出现miniprogram_npm文件夹
5. 为了使得vant-search标签在search页面中能用到,便在app.json中添加(多个页面也是如此)
	"usingComponents": {
		"van-search": "./miniprogram_npm/@vant/weapp/search/index",
	},

对于搜索框 用 van-search 标签 也可添加属性与事件

value="{{value}} 搜索框中的内容 {{}}中的value需要在search.js的data中添加
show-action 取消按钮
shape="round" 圆形
placeholder="请输入搜索关键字" 默认字
bind:search="onSearch" 当我们点击搜索时 执行
bind:cancel="onCancel" 当我们点击取消时 取消

实例1:

<van-search></van-search>

在这里插入图片描述

实例2:

<van-search 
	value="{{value}}" 
	show-action 
	shape="round" 
	placeholder="请输入搜索关键字" 
	bind:search="onSearch" 
	bind:cancel="onCancel">
</van-search>

在这里插入图片描述

上述 变量value需要在search.js中的Page的data中定义
     而onSearch,onCancel函数需要在search.js中的Page中定义
    
	onSearch(){
		// 出现提示
			wx.showToast({
  				title: '查询中',
  				// 出现的图标按钮 ''中的还有其他的值可以替代
  				icon: 'loading'
			})
	},

提示:
在这里插入图片描述

图标:

在这里插入图片描述

	onCancel(){
			this.setData({
  				value: ''
			})
	},

搜索框已完成,相应后端的搜索功能也必然不可缺少。

  1. 点开小程序中的云开发

在这里插入图片描述

  1. 更改数据库中的数据权限,勾选所有用户可读,仅创建者可读写

在这里插入图片描述

  1. 创建集合并添加记录

在这里插入图片描述
相关搜索功能要用到 van-cell 标签 需要在app.json中添加

"usingComponents": {
    "van-search": "./miniprogram_npm/@vant/weapp/search/index",
    "van-cell": "./miniprogram_npm/@vant/weapp/cell/index"
},

因为要用到数据库,所以需要在 search.js 中加载数据库,并获取 poster 数据

const db = wx.cloud.database();
const posterCollection = db.collection("poster");

连接到数据库后,需要对输入的数据 value 与数据库中的值进行匹配,引入 RegExp

我们举几个例子简单进行讲解:

const str1 = 'kobeisabasketballstar'
const str2 = 'iversonisbrave'

const reg = /nba/
const reg1 = /nba/i  // i 忽略大小写
const reg2 = /^nba/  // ^ 以nba为开头
const reg3 = /nba$/  // $ 以nba为结尾

console.log(reg.test(str1)); //false
console.log(reg1.test(str1)); //true

以上准备工作后,我们便可以开始构建搜索功能

wxml:

<block wx:if="results.length > 0">
		<van-cell 
		wx:for="{{results}}" 	
		wx:id="_id" 
		title="{{item.title}}" 
		size="large">
		</van-cell>
</block>
wx:for="{{results}}" 循环
	{{}}中的results需要在search.js的data中添加
	results 为检索内容 这里是数组 

这里先不要急,请接着看下去,后面会解释results的由来
Page({
  data: {
    value: '',
    results: []
  },
}),
wx:id="_id" 
	主键 _id 作为识别每个记录的主键 添加的记录中的字段_id
title="{{item.title}}" 
	item.title 为循环输出的内容 item为result中的每一项 title为添加的记录中的字段title

在这里插入图片描述

js:

在 onSearch(e) 中,我们先获取用户输入的值 value

let keyword = e.detail;

我想你可能会问 为什么是 e.detail 呢?
我们可以先输出 e

console.log(e);

此处输入
在这里插入图片描述

得到数据

在这里插入图片描述

解决这个问题后呢,我们就来解决先前的 results
同样是在 search.js 的 page 中

let keyword = e.detail;
posterCollection
      .where({
        title: db.RegExp({
          regexp: keyword,
          options: 'i'
        }) // 检索标题中有keyword 且不区分大小写
      })
      .orderBy('ts','asc') 
      // 前者为description(该为添加的记录中的字段)  后者为排列顺序 
      // 这里是按时间  asc升序排列 desc为降序
      .get() 
      .then(res => {
        this.setData({
          results: res.data
        })
      })

这里的res
同理我们可以用 console.log(res) 输出

在这里插入图片描述


最终代码整合

search.wxml 相应代码

<view class="search">
	<van-search value="{{value}}" 
	show-action
	shape="round"
	placeholder="请输入搜索关键字" 
	bind:search="onSearch" 
	bind:cancel="onCancel">
	</van-search>
	<block wx:if="results.length > 0">
		<van-cell wx:for="{{results}}" wx:id="_id" title="{{item.title}}" size="large"></van-cell>
	</block>
</view>

search.js 部分相应代码

const db = wx.cloud.database();
const posterCollection = db.collection("poster");
Page({
  data: {
    value: '',
    results: []
  },
  onSearch(e){
    wx.showToast({
      title: '查询中',
      icon: 'loading'
    })
    let keyword = e.detail;
    if(!keyword.trim()){
      wx.showToast({
        title: '请输入关键字',
        icon: 'error'
      })
      return ;
    }
    posterCollection
      .where({
        title: db.RegExp({
          regexp: keyword,
          options: 'i'
        })
      })
      .orderBy('ts','asc')
      .get()
      .then(res => {
        console.log(res,'----')
        this.setData({
          results: res.data
        })
      })
  },
  onCancel(){
    this.setData({
      value: '',
      results: [],
    })
  },

每天进步一点点!!!

冲阿!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小程序开发之搜索框 的相关文章

  • Vue 并排放置两个div的写法

    Vue的开发文档 Layout布局模块 https element eleme cn zh CN component select 样例 使用
  • 华为OD机试 - 等和子数组最小和(Java)

    题目描述 给定一个数组nums 将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 组内元素和的最小值 输入描述 第一行输入 m 接着输入m个数 表示此数组nums 数据范围 1 lt m lt 50 1 lt nums i lt

随机推荐

  • MySQL高级学习笔记

    目录 1 MySQL数据库逻辑架构 1 网络连接层 2 服务层 MySQL Server 1 连接池 Connection Pool 2 系统管理和控制工具 Management Services Utilities 3 SQL接口 SQL
  • 信息系统、课设、毕设

    信息系统 课设 毕设 可使用技术 后端 PHP Node js等 前端 jQuery vue等 UI layui elementui等 数据库 SQLserver MySQL等 APP uniapp等 适合 进销存ERP系统 商城 网站 A
  • mac卸载idea

    idea只有30天的试用期 比较穷 买不起正版 又不想用破解 是因为发现破解的版本写代码的时候反应好迟钝 一个报红的问题修复后半天还不好 到期了只能完全卸载重新装一遍 这样也还有个好处 能用最新版 一直在追求最新版的路上 给像我一样的强迫症
  • C语言:格式化输入输出函数

    C语言 格式化输入输出函数 1 格式化输出函数 printf 2 格式化输入函数 scanf C语言提供的格式化输入输出函数的原型在头文件stdio h中声明 在使用时应在程序头部包含该文件 include
  • 安卓Unity3D Camera图像和音频采集推送代码

    安卓Unity3d 可以使用ReadPixels从当前Render Target读取图像 音频可以从AudioClip读取 具体调用GetData接口 读取到的可能是float类型 有些音频编码器可能需要sint16格式 这需要做一个转换
  • 数据处理方法:归一化与标准化处理

    在数据挖掘中 在建模前需要对数据进行预处理 预处理方法包括归一化与标准化 对数据进行缩放 1 归一化 Normalization 将数据缩放到0 1之间 线性 常用 归一化 最大最小值归一化 y x
  • mysql jdbc配置重连_Spring Boot 配置MySQL数据库重连的操作方法

    使用jdbc连接MySQL 如果连接失效 可能会报类似的错误 com mysql jdbc exceptions jdbc4 CommunicationsException The last packet successfully rece
  • 预训练模型--GPT

    why预训练 finetune 目前在nlp领域 比较流行的一种方式就是 pretrain finetune 为什么是这种模式呢 在nlp领域大量数据是无标签的 只有小量数据是有标签的 而大量数据可以帮助模型获得更好的效果 泛化能力 所以在
  • Android大文件上传秒传之实战篇

    源码传送门 在上一篇文章我们介绍了获取大文件的一个唯一的特征值MD5 通过MD5我们可以唯一的标识一个文件 并可以实现秒传效果 今天的这篇文章主要介绍大文件的上传操作 当然谈到上传文件 网络是必不可少的 现在也有很多较为流行的网络框架 如v
  • Jsp邮件找回密码全攻略

    author Joy zhuang 一般大型网站我们登录的时候 密码忘了都有个功能可以找回密码 细数下大致的方法 1 直接把密码发送到你的邮箱去 一般是临时密码 2 短信验证 成本较高 3 密保问题 4 发送一个链接到你邮箱点击即可更改密码
  • 【C++入门】C++的异常管理机制介绍

    1 什么是异常 1 异常可以理解成可能导致程序不能正常运行的情况 或者说不希望发生的情况 2 异常的发生是可不预知的 我们不知道何时会发生何种异常 要是我们提前知道就处理了 3 所以我们在写程序时 就需要考虑将来程序运行时可能遇到的异常情况
  • pysot-新手跑代码遇到的问题及解决方法

    1 不管干什么首先得把文件夹加入到python的搜索路径 不然会import失败的 set PYTHONPATH PYTHONPATH D 3 Object tracking pysot master windos下 export PYTH
  • 【测试开发篇】测试用例及方法

    文章目录 测试用例的基本要素 案例 设计测试用例的具体设计方法 基于需求进行测试用例的设计 等价类 边界值 判定表 因果图 场景设计法 错误猜测法 正交排列 测试用例的基本要素 测试用例 Test Case 是为了实施测试而向被测试的系统提
  • Sqli-labs less 29

    Less 29 首先先看下tomcat中的index jsp文件 在apache的index php中 sql语句为 sql SELECT FROM users WHERE id id LIMIT 0 1 因此我们根据HPP的原理 我们直接
  • 算法第一章作业

    1 请上网了解编码规范 说明你本学期的编码遵循哪个规范及该规范的链接 本学期我会遵循Google的编码规范 参考链接 https blog csdn net freeking101 article details 78930381 2 请阅
  • 大数据学习 第一篇——基础知识

    前言 在学习大数据之前 先要了解他解决了什么问题 能给我们带来什么价值 一方面 以前IT行业发展没有那么快 系统的应用也不完善 数据库足够支撑业务系统 但是随着行业的发展 系统运行的时间越来越长 搜集到的数据也越来越多 传统的数据库已经不能
  • ftp 530 login incorrect

    今天在新建虚拟账号过程中遇到的一点小问题 记录一下 新建的流程如下 vim etc vsftpd virtusers 在最底下加入账号名 ftpuser 和密码 db load T t hash f etc vsftpd virtusers
  • java多线程内存同步问题

    多线程内存可见性 1 volatile保证内存可见 2 sleep同步内存数据 3 System out print 方法同步线程数据 4 异常打印也会同步线程数据 1 volatile保证内存可见 volatile保证java多线程内存
  • 字符串流stringstream--<sstream>

    字符串流stringstream流详解 一 stringstream是C 提供的一个字符串流 与iostream和fstream的操作方法类似 只是功能不同 要使用字符串流必须包含其头文件
  • 小程序开发之搜索框

    日常学习之小程序开发 搜索框 为了完成搜索框 我们先在 pages 文件夹中创建 search 文件并创建相应的 page 搜索框 可以用 vant 组件中的 van search 标签来实现 需要在 miniprogram 文件夹的内建终