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

  • 如何关闭iphone长按屏幕编辑(如何关闭iphone长按屏幕删除应用)

    如何关闭iphone长按屏幕编辑(如何关闭iphone长按屏幕删除应用)

  • cpu时钟主频的单位(cpu的主频和时钟周期)

    cpu时钟主频的单位(cpu的主频和时钟周期)

  • 电脑usb充电如何变快(usbc给电脑充电)

    电脑usb充电如何变快(usbc给电脑充电)

  • 华为nova5i充电指示灯怎么设置(华为nova5pro充电界面)

    华为nova5i充电指示灯怎么设置(华为nova5pro充电界面)

  • 网易云音乐播放失败请切换输出设备(网易云音乐播放一会就停了怎么办?)

    网易云音乐播放失败请切换输出设备(网易云音乐播放一会就停了怎么办?)

  • i59400f配什么显卡和主板(i59400f搭配)

    i59400f配什么显卡和主板(i59400f搭配)

  • 腾讯会议手机版怎么下载(腾讯会议手机版怎么设置虚拟背景)

    腾讯会议手机版怎么下载(腾讯会议手机版怎么设置虚拟背景)

  • 复制按什么键(复制按什么键粘贴按什么键)

    复制按什么键(复制按什么键粘贴按什么键)

  • 两部手机微信能同步吗(一部手机怎么登两个微信)

    两部手机微信能同步吗(一部手机怎么登两个微信)

  • 华为mate30有几个卡槽(华为mate30有几个版本的区别)

    华为mate30有几个卡槽(华为mate30有几个版本的区别)

  • 为什么手机4g变成2g(为什么手机4G变成E)

    为什么手机4g变成2g(为什么手机4G变成E)

  • 快手私聊别人能看见吗(快手私聊别人能看到吗)

    快手私聊别人能看见吗(快手私聊别人能看到吗)

  • 路由器注册灯亮正常吗(家里路由器注册灯亮)

    路由器注册灯亮正常吗(家里路由器注册灯亮)

  • 显卡tkg线要插吗(显卡带的线)

    显卡tkg线要插吗(显卡带的线)

  • vivo怎么设置外内存卡(vivo怎么设置外国号码打不进来)

    vivo怎么设置外内存卡(vivo怎么设置外国号码打不进来)

  • 怎么解绑爱奇艺手机号(怎么解绑爱奇艺绑定的微信)

    怎么解绑爱奇艺手机号(怎么解绑爱奇艺绑定的微信)

  • 双引号的作用-(双引号的作用及例句)

    双引号的作用-(双引号的作用及例句)

  • 能量保护罩在哪里(能量保护罩在哪里领)

    能量保护罩在哪里(能量保护罩在哪里领)

  • 如何查看手机定位(如何查看手机定向流量软件)

    如何查看手机定位(如何查看手机定向流量软件)

  • 华为p30手机可不可以开空调(华为p30手机可不可以录屏)

    华为p30手机可不可以开空调(华为p30手机可不可以录屏)

  • 小米手机回收站恢复的照片在哪里(小米手机回收站删除的照片怎么恢复)

    小米手机回收站恢复的照片在哪里(小米手机回收站删除的照片怎么恢复)

  • opporeno电子保卡在哪里(oppo a72电子保卡)

    opporeno电子保卡在哪里(oppo a72电子保卡)

  • 文本效果设置为内置渐变填充紫色(文本效果设置为内置样式填充红色着色2)

    文本效果设置为内置渐变填充紫色(文本效果设置为内置样式填充红色着色2)

  • React中CodeMirror插件的使用及封装(react img onerror)

    React中CodeMirror插件的使用及封装(react img onerror)

  • 发票丢失第一联盖章能用么
  • 应交增值税一般纳税人的账怎么做
  • 企业所得税税负高是什么意思
  • 应交税费和税金及附加的关系
  • 工厂房租没有发票怎么办
  • 开办期的所得税年度申报
  • 成本费用的关系
  • 固定资产折旧计算公式
  • 其他应收款包括应收利息吗
  • 暂估入账后没有交房产税
  • 2019最新运输发票样本
  • 按应收账款余额计提坏账准备的会计分录
  • 支票结算的账务处理
  • 没有预收账款应该用什么科目核算
  • 由收款人签发,经付款人承兑
  • 出现销项负数
  • 刷信用卡付货款怎么操作
  • 营业外支出罚款要交税吗
  • 商品溢余做销售的会计分录怎么写?
  • 产品质量问题怎么处罚
  • 未完工的工程款怎么支付
  • 房地产商品房销售营业税怎么算
  • 安装服务异地施工增值税在哪交
  • 房产税计税依据房产原值怎么算
  • 企业为一般纳税人税率多少
  • 房企行业其他应收账款的来源是什么
  • 发票密码区出来了一些
  • 关于诉讼费减半如何减的问题
  • 小规模纳税人适用的增值税征收率
  • 道路工程施工机械
  • mac dns 设置
  • 借助的近义词
  • .inc是什么文件
  • moviemaker是什么软件
  • vit详解
  • 谷歌浏览器如何设置主页为默认页
  • three.js 入门
  • 创建数据的命令是
  • 正则表达式除去指定字母
  • 跨月的专用发票可以重新开吗
  • 固定资产多少钱以上才要计提折旧
  • 帝国cms模板文件在哪
  • 补提企业所得税财务报表应该如何调整
  • 个税计税周期 一年
  • 新购买的发票如何读取
  • 增值税是在年末怎么处理
  • 城市维护建设税是什么意思
  • 茶叶开一般发票(非增值税发票)是多少个点的?
  • 商场账务
  • 公司的财产保险业务
  • 电子承兑汇票到期提示付款后多久到账
  • sql server 2008数据库没有备份文件恢复
  • 当月收入未开票怎么入账
  • 不征收耕地占用税的是
  • 营业税金及附加包括哪些
  • 租的办公室装修费怎么处理
  • 单位购买防疫物资请示
  • 购买国家机关证件罪量刑标准
  • 开了发票就要交税吗?
  • 免抵税额和免抵退税额一样吗
  • 普票抵扣
  • windows 10的安装
  • mysql批量执行sql文件工具
  • sql多条件组合条件的先后顺序
  • freebsd10安装教程
  • win2003安装
  • 远程删除
  • 无需u盘安装系统
  • 怎么查看opengl版本
  • dos命令批处理
  • Node.js中的什么模块是用于处理文件和目录的
  • 安卓系统滑动设置
  • jquery自动点击按钮
  • jquery对象与dom对象可以相互转换
  • python自动化监控
  • js基础
  • 电子税务局跨区域
  • 五险一金不满一年可以领失业金吗
  • 上海社保联网
  • 香港pcc价格
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设