位置: 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)

  • 小米6支持多少瓦充电(小米6支持多少帧率)

    小米6支持多少瓦充电(小米6支持多少帧率)

  • 拍立得照片全白怎么办(拍立得照片白色不成像)

    拍立得照片全白怎么办(拍立得照片白色不成像)

  • 手机网络视频怎么下载(手机网络视频怎么删除)

    手机网络视频怎么下载(手机网络视频怎么删除)

  • 手机充电宝和手机不匹配怎么办(手机充电宝手机)

    手机充电宝和手机不匹配怎么办(手机充电宝手机)

  • 苹果手机被禁止获取免费APP怎么办(苹果手机被禁止获取免费APP是什么原因)

    苹果手机被禁止获取免费APP怎么办(苹果手机被禁止获取免费APP是什么原因)

  • mac插耳机还是外放(macpro插上耳机后还是有外放声音)

    mac插耳机还是外放(macpro插上耳机后还是有外放声音)

  • 苹果手机充电器可以充ipad吗(苹果手机充电器序列号查询)

    苹果手机充电器可以充ipad吗(苹果手机充电器序列号查询)

  • 为什么流量卡网速慢(为什么流量卡网速慢怎么解决)

    为什么流量卡网速慢(为什么流量卡网速慢怎么解决)

  • 华为手机卡1卡2设置在哪里(华为手机卡1卡2在哪里查找到)

    华为手机卡1卡2设置在哪里(华为手机卡1卡2在哪里查找到)

  • 笔记本光驱不读碟(笔记本光驱不读盘还响)

    笔记本光驱不读碟(笔记本光驱不读盘还响)

  • qqtim在线是什么

    qqtim在线是什么

  • vivox21是不是全面屏(vivox20是全面屏吗)

    vivox21是不是全面屏(vivox20是全面屏吗)

  • WiFi有信号已连接但是设置显示无法上网(wifi信号已连接不可上网是什么原因)

    WiFi有信号已连接但是设置显示无法上网(wifi信号已连接不可上网是什么原因)

  • 电脑返回上一个界面快捷键是什么(电脑返回上一个软件快捷键)

    电脑返回上一个界面快捷键是什么(电脑返回上一个软件快捷键)

  • 华为自带测网速在哪(华为自带测网速功能)

    华为自带测网速在哪(华为自带测网速功能)

  • 如何把时间规划局放在锁屏(如何把时间规划做成表格)

    如何把时间规划局放在锁屏(如何把时间规划做成表格)

  • 京东黑名单怎么恢复(京东黑名单的人怎么拉出来)

    京东黑名单怎么恢复(京东黑名单的人怎么拉出来)

  • 手机银行怎么交医保(手机银行怎么交医疗保险)

    手机银行怎么交医保(手机银行怎么交医疗保险)

  • 饿了么可以开电子发票吗(饿了么开电瓶可以工资扣)

    饿了么可以开电子发票吗(饿了么开电瓶可以工资扣)

  • wps怎样查找关键词(wps怎样查找关键字手机)

    wps怎样查找关键词(wps怎样查找关键字手机)

  • 文件夹如何按序号排列(文件夹如何按序排列图片)

    文件夹如何按序号排列(文件夹如何按序排列图片)

  • 百万猜歌能提现吗(百万猜歌50元红包能提现是真的吗)

    百万猜歌能提现吗(百万猜歌50元红包能提现是真的吗)

  • 电信ipv6是什么网络(电信ipv6是固定的吗)

    电信ipv6是什么网络(电信ipv6是固定的吗)

  • ios12.2发热严重(ios12.5.3发热)

    ios12.2发热严重(ios12.5.3发热)

  • 戴尔的无线开关在哪(戴尔无线开关驱动程序)

    戴尔的无线开关在哪(戴尔无线开关驱动程序)

  • 图虫发布的视频为什么看不到(图虫做的视频在哪里)

    图虫发布的视频为什么看不到(图虫做的视频在哪里)

  • 为什么手机声音变小(为什么手机声音变成听筒了)

    为什么手机声音变小(为什么手机声音变成听筒了)

  • 小爱同学闹钟怎么设置铃声(小爱同学闹钟怎么关闭早报)

    小爱同学闹钟怎么设置铃声(小爱同学闹钟怎么关闭早报)

  • linux查看文件大小(linux查看文件大小以m为单位)

    linux查看文件大小(linux查看文件大小以m为单位)

  • 手机接口类型(安卓手机接口类型)

    手机接口类型(安卓手机接口类型)

  • 海南增值税发票图片
  • 一般纳税人暂未开具发票
  • 利润税是多少个点
  • 要交多少增值税
  • 企业社会保险登记表
  • 小规模印花税是季报还是月报
  • 小微企业免税计入什么科目
  • 外商投资企业采取发包、出租经营
  • 房产税的计税依据有哪些
  • 技术研发费加计扣除
  • 商业企业销售的产品
  • 商场做促销
  • 以前年度的负债没挂账怎么办
  • 认缴制下实缴资本流程
  • 出售未完成折旧固定资产进项税转出
  • 预收账款缴税的计算公式
  • 一般纳税人认定标准500万是什么时候开始执行
  • 股票回购会计处理
  • 母子公司之间支付的租赁费可以税前扣除么
  • 投资收益科目应用
  • 企业 停业
  • 公司注销了是不是就不能用了
  • 借贷记账法的记账规则是
  • 收到转账支票怎么填写凭证
  • 其他综合收益会计科目编码
  • 小规模纳税人安装费税率
  • edge浏览器总是打开新的网页
  • ps4运行windows
  • 银行存款调账怎么调
  • 在建工程进项税额转出
  • 小规模纳税人缴税标准是什么
  • Linux系统怎么配置IP
  • hp是什么代码
  • 固定资产减值损失属于什么科目
  • citespace分析derwent
  • php 截断
  • 应交税费应交增值税明细账怎么填
  • 营业额500万算什么企业
  • vue路由跳转的三种方法
  • 由浅入深英语怎么说
  • idea2021版本创建项目
  • 车间打杂工
  • 飞机票抵扣进项税含民航发展基金吗
  • 办公室清洁费计算公式
  • 公司缴个人所得税吗
  • 裁员补偿金如何合理避税
  • 累计折旧当月增加当月减少
  • cgroup限制内存
  • 非盈利机构怎么说
  • 应收账款确认无法收回的会计处理
  • 平行结转法什么意思
  • 废旧物资处理的税金
  • 什么叫增值入股
  • 商贸企业增值税税率是多少
  • 发放股票股利的意义包括
  • 购进生产车间增值税税率
  • 代扣代缴附加税怎么做账
  • 购买材料没开票怎么做账
  • 技术服务费可以开专票吗
  • 电子承兑非拒付会怎么样
  • ゆうちょ银行转账步骤
  • 简单谈谈设计与市场的关系
  • xp硬盘安装win7系统教程
  • ghost到一半报错
  • rundll32找不到文件
  • newsupd.exe - newsupd是什么进程 有什么用
  • win7怎么修改开始菜单样式
  • win8系统自带应用都打不开了怎么办
  • microsoft build
  • jQuery中的ajax async同步和异步详解
  • linux重启关闭打开达梦数据库
  • javascript函数调用函数
  • js实现兼容性较好的方法
  • javascript中checkbox使用方法实例演示
  • Sublime Text 3常用插件及安装方法
  • 欢迎使用来电提醒业务是什么意思
  • 国税怎么打印发票
  • 央企收入归谁
  • 内蒙古赤峰市房价2023年最新房价走势
  • 现在企业可以享受低保吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设