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

  • oppo手机权限管理在设置的哪里(oppo手机权限管理在哪里找)

    oppo手机权限管理在设置的哪里(oppo手机权限管理在哪里找)

  • 微信便签置顶怎样设置(微信顶置便签怎么弄)

    微信便签置顶怎样设置(微信顶置便签怎么弄)

  • 笔记本无线网卡坏了(笔记本无线网卡找不到了)

    笔记本无线网卡坏了(笔记本无线网卡找不到了)

  • 微信如何删除视频号(微信如何删除视频号发布内容)

    微信如何删除视频号(微信如何删除视频号发布内容)

  • ai内存不足无法完成操作(ai内存不足无法处理外观)

    ai内存不足无法完成操作(ai内存不足无法处理外观)

  • 苹果手机屏幕上的悬浮球怎么设置没有(苹果手机屏幕上的圆点怎么弄出来)

    苹果手机屏幕上的悬浮球怎么设置没有(苹果手机屏幕上的圆点怎么弄出来)

  • 国内手机怎么才能用Facebook(国内手机怎么才能用外国软件)

    国内手机怎么才能用Facebook(国内手机怎么才能用外国软件)

  • 微信健康通行码在哪里找(微信健康通行码怎么解绑)

    微信健康通行码在哪里找(微信健康通行码怎么解绑)

  • 一寸照片的像素是多少乘多少(一寸照片的像素和尺寸怎么调整)

    一寸照片的像素是多少乘多少(一寸照片的像素和尺寸怎么调整)

  • 朋友圈一横一点一横什么意思(朋友圈一横一点是删除好友了吗)

    朋友圈一横一点一横什么意思(朋友圈一横一点是删除好友了吗)

  • 闽政通实名认证安全吗

    闽政通实名认证安全吗

  • 索尼是日本的吗(索尼是日本的还是么偶爱拍)

    索尼是日本的吗(索尼是日本的还是么偶爱拍)

  • 华为手机支付宝怎么分身(华为手机支付宝在桌面不显示不出来)

    华为手机支付宝怎么分身(华为手机支付宝在桌面不显示不出来)

  • camal00是什么型号(cam al00是什么型号)

    camal00是什么型号(cam al00是什么型号)

  • word文档怎样填充颜色(word文档怎样填充)

    word文档怎样填充颜色(word文档怎样填充)

  • word修改全部字体(word怎么改全部的字号)

    word修改全部字体(word怎么改全部的字号)

  • 乐视2怎么隐藏图标(乐视2怎么隐藏桌面图标)

    乐视2怎么隐藏图标(乐视2怎么隐藏桌面图标)

  • 手机自助冻结怎么解除没有手机号(手机自助冻结了别人能登吗?)

    手机自助冻结怎么解除没有手机号(手机自助冻结了别人能登吗?)

  • 怎么将WPS里的表格格式改为excel表格格式(怎么把wps表格放到wps文档里)

    怎么将WPS里的表格格式改为excel表格格式(怎么把wps表格放到wps文档里)

  • 实况照片怎么变成视频(实况照片怎么变成动态表情包)

    实况照片怎么变成视频(实况照片怎么变成动态表情包)

  • 三星手机如何截图(三星手机如何截图手机屏幕)

    三星手机如何截图(三星手机如何截图手机屏幕)

  • chatgpt 无法登录报错Access denied、OpenAl‘s services are not available in yourcountry. (error=unsupported )(无法登陆p.to)

    chatgpt 无法登录报错Access denied、OpenAl‘s services are not available in yourcountry. (error=unsupported )(无法登陆p.to)

  • 高新技术企业产品是什么意思
  • 生产企业出口货物劳务免抵退税申报明细表
  • 免抵税额什么时候缴纳城建税
  • 税务局代开发需要盖章吗
  • 管理费用福利费和应付职工薪酬福利费区别
  • 什么叫销售劳务
  • 小微企业附加税减半征收
  • 记账凭证按其适用的交易和事项分类可以分为
  • 月末计提账务处理
  • 回收废品残料会计分录
  • 税务自查补缴税款算滞纳金么
  • 应缴纳增值税计算公式
  • 核定征收的小微企业企业所得税计算
  • 公司抵扣发票不用交税吗
  • 施工企业开专票还是开普票好
  • 小规模纳税人文化事业建设费减免政策
  • 计入成本的有哪些科目
  • 暂估成本和实际成本的分录
  • 总资产利润率计算公式是什么意思
  • 员工福利费用会计怎么做
  • 销售净利率怎么求
  • 暂估入库会影响利润吗
  • 专票当普票入帐有问题吗
  • 记账凭证做完之后干什么
  • 涉税票据如何避免税务风险?
  • ios路由设计
  • 跟客户合作后发给客户的句子
  • 税盘减免税款的会计分录
  • 利用的英文
  • 第三方检测公司招聘信息
  • 网页提示摄像头未授权
  • 公司报销医疗费的范围
  • 增值税已认证抵扣
  • 工资申报怎么写
  • hp是什么软件
  • 企业持有待售的固定资产,应当对其预计
  • python爬虫推荐
  • java web中的转发和重定向
  • yolo算法百度百科
  • redisson php
  • 深入理解php类的知识
  • 说好的运费少给怎么办
  • 材料采购是什么类科目
  • 社保费用可以提前从工资扣吗
  • 金蝶现金流量表不对怎么处理
  • 费用退回如何记账
  • java自增自减运算符的规则
  • 自由会计服务类工作者
  • 运输发票抵扣进项税额
  • 销售收入和销售收入净额的区别
  • 年金终值系数是指已知( ),求终值
  • 公司举办活动方案
  • 控股子公司注销母公司账务处理实例
  • 未投入使用的固定资产折旧计入什么科目
  • 工会经费和福利费绩效目标怎么写
  • 工程在建工程转固清单
  • 公司要注销账面怎么处理
  • 预计产品质量保证损失计入什么
  • 小企业会计准则2023电子版
  • 社保费申报是当月的
  • 无形资产摊销的会计科目怎么录
  • win10重置登录
  • win10edge浏览器默认主页网址
  • freebsd配置dns
  • 电脑主板bios设置图解
  • wbs是什么的缩写
  • vnetd.exe
  • 如何在Windows下移动文件
  • win7笔记本任务管理器
  • win8打开运行的快捷键是什么
  • centos 安装
  • win10升级失败怎么办
  • gpu缩放在哪里打开
  • shell脚本编程工具
  • 利用Python中的turtle绘制乡村振兴
  • android颜色值
  • jquery写网页
  • 广东省电子税务局app下载官网
  • 山东地域分布
  • 工会经费收支办法2022新政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设