位置: IT常识 - 正文

【小程序项目开发-- 京东商城】uni-app之自定义搜索组件(中)-- 搜索建议(微信小程序项目开发实战)

编辑:rootadmin
【小程序项目开发-- 京东商城】uni-app之自定义搜索组件(中)-- 搜索建议

推荐整理分享【小程序项目开发-- 京东商城】uni-app之自定义搜索组件(中)-- 搜索建议(微信小程序项目开发实战),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:小程序 项目,小程序怎么启动项目,小程序怎么启动项目,微信小程序项目开发实战,小程序项目开发流程,小程序开发项目,小程序项目开发流程,微信小程序项目开发实战,内容如对您有帮助,希望把文章链接给更多的朋友!

🤵‍♂️ 个人主页: @计算机魔术师 👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。

🌐 推荐一款找工作神器网站: 点击跳转牛客网 |笔试题库|面试经验|实习招聘内推|

还没有账户的小伙伴 速速点击链接登录注册把!🎉🎉

该文章收录专栏 ✨ 2022微信小程序京东商城实战 ✨

文章目录一、 渲染UI结构二、 input事件处理三、搜索框自动获取焦点四、防抖处理五、根据关键词查询搜索建议列表5.1 数据请求5.2 渲染UI结构5.3 点击建议跳转详情页一、 渲染UI结构可在开发工具中添加该页面编译模式(每次编译即在该页面)

使用uni-app官方搜索组件可快速搭建 输入框

通过官方组件提供的搜索组件以及自定义结构如下

<uni-search-bar :radius="100" @input="input" cancelButton="none" bgColor="#dfdfdf"></uni-search-bar>【小程序项目开发-- 京东商城】uni-app之自定义搜索组件(中)-- 搜索建议(微信小程序项目开发实战)

效果:

设置背景方法一(用view包裹,设置样式):<view class="search-box"> <uni-search-bar :radius="100" @input="input" cancelButton="none" bgColor="#dfdfdf"></uni-search-bar> </view> .search-box { background-color: #ff1e0a; }设置背景方法二(在官方组件内设置) 在uni_modules找到官方组件包

效果(一样)

添加吸顶效果(保持在页面顶部) .search-box { // 吸顶 position: sticky; top: 0; z-index: 999; }二、 input事件处理

在input组件中,输入的值都在input对该函数所传的参数中(不是e.value,官方将input事件绑定事件结构为value值)

methods: { // 搜索框input事件处理 input(e){ console.log(e) // 输出对应值 } }

效果

三、搜索框自动获取焦点

实现在用户点击搜索框 跳转到搜索页面时,搜索框自动获取焦点(可输入)

在官方组件源文件修改如下show , showsync属性为true(使其判断为真,焦点为真显示) 修改如下 注意(预览效果需要在真机上预览,开发工具上与真机或多或少有些不兼容): 四、防抖处理

可以看到,每次输入键入一次数据都会触发一次input请求,我们设置在五百毫秒内用户输入数据时不触发请求,五百毫秒后用户没有输入数据时触发请求,实现 防抖处理

这里我们通过JavaScript 延时器中的setTimeout和clearTimeout实现(延时与取消延时)

setTimeout语法格式setTimeout(要执行的代码, 等待的毫秒数)setTimeout(JavaScript 函数, 等待的毫秒数)clearTimeout语法格式clearTimeout() 方法可取消由 setTimeout() 方法设置的定时操作。clearTimeout() 方法的参数必须是由 setTimeout() 返回的 ID 值(对应取消)。最终实现代码(注意 timer 是全局变量) data() { return { inputString: '', timer: null }; }, methods: { // 搜索框input事件处理 input(e) { // 触发事件 取消赋值操作 clearTimeout(timer) // 500毫秒后赋值 timer = setTimeout(() => { this.inputString = e console.log(this.inputString) }, 500) }

效果:

五、根据关键词查询搜索建议列表5.1 数据请求请求参数参数名参数说明备注query查询内容如: goods/qsearch?query=小米接口数据样式{ "message": [ { "goods_id": 57332, "goods_name": "400毫升 海鲜食品冷藏冰包 注水冰袋医用冰袋户外冷藏保鲜熟食冷藏反复使用(10个装)" }, { "goods_id": 57194, "goods_name": "亿力洗车工具汽车美容用品海绵刷不伤车漆擦车海棉清洁海绵" } ], "meta": { "msg": "获取成功", "status": 200 }}定义data数据节点searchResults data() { return { inputString: '', timer: null, searchResults: '' }; },再input事件处理函数中调用 获取数据函数getsearchList input(e) { // 触发事件 取消赋值操作 clearTimeout(this.timer) // 500毫秒后赋值 this.timer = setTimeout(() => { this.inputString = e this.getSearchList() }, 500) }定义getsearchList函数(判断是否为空格和空字符串) async getSearchList() { // 如果是空字符串则 不请求 if (this.inputString == '') { this.searchSuggest = [] return } // 如果为空格,则报错 else if (this.inputString.trim() === '') return uni.$showMsg('输入内容有误') const { data: res } = await uni.$http.get('/api/public/v1/goods/qsearch', { query: this.inputString }) // 请求错误报错 if (res.meta.status != 200) return uni.$showMsg() // 赋值 this.searchSuggest = res.message },效果(可以看到searchList成功接受到了值): 输入空格报错 5.2 渲染UI结构结构 <!-- 搜索建议列表容器 --> <view class="sgg-list-container"> <view class="sgg-item" v-for="(product,i) in searchResults" v-bind:key="i"> <view class="sgg-name">{{product.goods_name}}</view> <uni-icons type="right"></uni-icons> </view> </view>样式.sgg-list-container { .sgg-item { display: flex; background-color: #fff; align-items: center; border-top: 3rpx solid #efefef; justify-content: space-between; padding: 20rpx 10rpx; .sgg-name { // 不允许换行 white-space: nowrap; // 超出不显示 overflow: hidden; // 超出文本用ellipsis代替 text-overflow: ellipsis; margin-right: 5rpx; font-size: 28rpx; } }}

效果:

5.3 点击建议跳转详情页方法一 组件式跳转: 将view 改为 navigator组件 并传商品ID参数

结构

<!-- 搜索建议列表容器 --> <view class="sgg-list-container"> <navigator class="sgg-item" v-for="(product,i) in searchResults" v-bind:key="i" :url="'/subpackages/goods_list/goods_list?cat_id=' + product.goods_id"> <view class="sgg-name">{{product.goods_name}}</view> <uni-icons type="right"></uni-icons> </navigator> </view>方法二 编程式跳转: 绑定click 事件,定义函数 <!-- 搜索建议列表容器 --> <view class="sgg-list-container"> <view class="sgg-item" v-for="(product,i) in searchResults" v-bind:key="i" @click="gotogoodlist(product)"> <view class="sgg-name">{{product.goods_name}}</view> <uni-icons type="right"></uni-icons> </view> </view>gotogoodlist(item){ uni.navigatorto({ url = "'/subpackages/goods_list/goods_list?cat_id=' + item.goods_id"})

效果:

✨谢谢你的阅读,您的点赞和收藏就是我创造的最大动力!✨
本文链接地址:https://www.jiuchutong.com/zhishi/289007.html 转载请保留说明!

上一篇:新建vite+vue3+ts项目,以及解决过程中遇到的问题(新建vue项目)

下一篇:日本北海道 (© Hiroshi Yokoyama/eStock Photo)

  • 抱着同龄人的女儿,就是人生赢家了?(同龄抱小孩)

    抱着同龄人的女儿,就是人生赢家了?(同龄抱小孩)

  • 腾达信号扩展器怎么重新设置(腾达信号扩展器a9)

    腾达信号扩展器怎么重新设置(腾达信号扩展器a9)

  • 电话技术支持有效期(电话技术支持有效,但是保修期已过保)

    电话技术支持有效期(电话技术支持有效,但是保修期已过保)

  • 苹果11连拍左滑不了(苹果11pro连拍左滑不了)

    苹果11连拍左滑不了(苹果11pro连拍左滑不了)

  • 苹果有序列号能查什么(苹果有序列号能买吗)

    苹果有序列号能查什么(苹果有序列号能买吗)

  • VPN是什么

    VPN是什么

  • 微信没置顶为何被置顶(微信为什么没有顶置)

    微信没置顶为何被置顶(微信为什么没有顶置)

  • 怎么把视频剪辑到一起(怎么把视频剪辑短一些)

    怎么把视频剪辑到一起(怎么把视频剪辑短一些)

  • iphonex录屏怎么录声音(iphonex录屏怎么设置)

    iphonex录屏怎么录声音(iphonex录屏怎么设置)

  • 多媒体计算机是(多媒体计算机是多媒体教室的核心)

    多媒体计算机是(多媒体计算机是多媒体教室的核心)

  • 苹果蓝牙耳机老是断开(苹果蓝牙耳机老是语音控制)

    苹果蓝牙耳机老是断开(苹果蓝牙耳机老是语音控制)

  • 怎么发超过5分钟的视频(怎么才能发超过五分钟的朋友圈)

    怎么发超过5分钟的视频(怎么才能发超过五分钟的朋友圈)

  • 荣耀哪款支持光学防抖(荣耀哪款手机可以)

    荣耀哪款支持光学防抖(荣耀哪款手机可以)

  • 拼多多不确认收货商家能收到钱吗(拼多多不确认收货会不会扣费)

    拼多多不确认收货商家能收到钱吗(拼多多不确认收货会不会扣费)

  • 苹果11pro是双卡怎么装(苹果14pro是不是双卡双待)

    苹果11pro是双卡怎么装(苹果14pro是不是双卡双待)

  • 联想e480怎么进入bios(联想e480怎么进入u盘启动)

    联想e480怎么进入bios(联想e480怎么进入u盘启动)

  • 抖音创作的原声上哪找(抖音创作的原声怎么搞)

    抖音创作的原声上哪找(抖音创作的原声怎么搞)

  • 淘宝88会员有什么用(淘宝88会员有什么音乐会员)

    淘宝88会员有什么用(淘宝88会员有什么音乐会员)

  • word邀请函日期怎么自动更新(word将日期调整为可以根据邀请函生成日期自动更新)

    word邀请函日期怎么自动更新(word将日期调整为可以根据邀请函生成日期自动更新)

  • 苹果耳机可以连接两台手机吗(苹果耳机可以连安卓手机吗)

    苹果耳机可以连接两台手机吗(苹果耳机可以连安卓手机吗)

  • vivox23可以红外遥控吗(vivox23怎么打开红外线功能)

    vivox23可以红外遥控吗(vivox23怎么打开红外线功能)

  • 核显有什么用(nas核显有什么用)

    核显有什么用(nas核显有什么用)

  • 华为手机屏幕下面三个键设置方法(华为手机屏幕下的三个功能键设置方法)

    华为手机屏幕下面三个键设置方法(华为手机屏幕下的三个功能键设置方法)

  • 基于Java+SpringBoot+vue+element驾校管理系统设计和实现

    基于Java+SpringBoot+vue+element驾校管理系统设计和实现

  • 什么是边际税率高
  • 税务机关如何处理公司多交税
  • 不良资产处置措施
  • 个人所得税申报是公司申报还是个人申报
  • 收到货款发货了没开发票怎么入账
  • 工程项目的存货含哪些科目
  • 音乐茶座取什么名字好呢
  • 房地产出租是否缴纳土地增值税
  • 外币借款汇兑差额资本化额怎么计算
  • 企业用流动资金怎么做账
  • 当期发生的费用
  • 两笔不同业务能做一个凭证吗
  • 快递快件丢失
  • 税审报告谁签字
  • 小规模企业是否需要备案登记
  • 社会组织捐款
  • 采购合同中含税金额
  • 公司没有残疾人要交残疾人保障金吗
  • 营改增后城建税怎么算
  • 增值税有留底怎么申请退税
  • 客户转钱到公司怎么说
  • 内账增值税会计核算
  • 建筑安装服务费可以抵扣进项税吗
  • PHP:oci_new_descriptor()的用法_Oracle函数
  • .exe是啥
  • win10专区
  • 股东借款给公司会计分录
  • 罚款在企业所得税前可以扣除吗
  • 出口退税科目 月底如何结转
  • 应收账款包括哪些
  • 销售旧固定资产开票税目是什么
  • token过期处理
  • 同城票据清算和清算资金往来的区别
  • uni-app--》uni-app的生命周期讲解
  • 收到社保稳岗补贴转入营业外收入要交企业所得税吧
  • nerf代码
  • websocket怎么用
  • 残保金计提比例
  • viite
  • 沙子产量表格
  • 报销宽带费属于什么费用
  • 计提提成是什么意思
  • 上月未结账本月是否能记账
  • 甲供材甲方如何缴纳增值税
  • 货物或应税劳务名称怎么填
  • 股权激励费用摊销意思是
  • 主营业务收入明细科目
  • 简易征收预缴税率怎么算
  • 公司借个人款利息产生个人所得税公司可以承担吗
  • 工会经费通过应交税费核算吗
  • 公司是生产企业现在要开出租赁的发票可以开吗
  • 现金日记账年结怎么划线
  • 冲销以前年度主营业务成本
  • 企业收到微信和企业微信
  • 开票软件升级包
  • 固定资产清理费用账务处理
  • 现金支票取现怎么记账
  • 签合同前的协议叫什么
  • 年末本年利润怎么转到未分配利润
  • sql cast,convert,QUOTENAME,exec 函数学习记录
  • win10开始按钮点不动
  • 怎么禁止p2p下载器
  • windows7 ie
  • 清除桌面应用软件
  • win10如何关闭windows defender实时保护
  • macbook imessage
  • windows10如何关闭快捷键
  • linux怎么恢复到初始状态
  • linux操作系统root
  • 计算机网络设计
  • 笔记本等待网络准备好
  • js生成随机数函数
  • linux中fork()函数详解(原创!!实例讲解)
  • unity怎么设置多个关卡
  • nodejs微信公众号开发
  • javascript文本框获得焦点
  • javascript初级教程
  • JavaScript为事件句柄绑定监听函数实例详解
  • 寻找志同道合的小伙伴
  • 80491232税务申报代码
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设