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

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

文章目录

一、 渲染UI结构

  • 可在开发工具中添加该页面编译模式(每次编译即在该页面)

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

图片.png

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

<uni-search-bar :radius="100" @input="input" cancelButton="none" bgColor="#dfdfdf"></uni-search-bar>

效果:

图片.png

  • 设置背景方法一(用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找到官方组件包

图片.png图片.png

  • 效果(一样)

图片.png

  • 添加吸顶效果(保持在页面顶部)
 .search-box {
   // 吸顶
   position: sticky;
   top: 0;
   z-index: 999;
 }

二、 input事件处理

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

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

效果

26.gif

三、搜索框自动获取焦点

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

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

四、防抖处理

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

28.gif

这里我们通过JavaScript 延时器中的setTimeoutclearTimeout实现(延时与取消延时

  • 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)
      }

效果:

29.gif

五、根据关键词查询搜索建议列表

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成功接受到了值):30.gif
  • 输入空格报错31.gif

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;
   }
 }
}

效果:

33.gif

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"
})

效果:

34.gif

✨谢谢你的阅读,您的点赞和收藏就是我创造的最大动力!✨



相关文章
|
6月前
|
小程序 搜索推荐 JavaScript
引入小程序平台对app有啥好处
引入小程序平台对app有啥好处
516 155
|
7月前
|
JSON 监控 数据格式
1688 item_search_app 关键字搜索商品接口深度分析及 Python 实现
1688开放平台item_search_app接口专为移动端优化,支持关键词搜索、多维度筛选与排序,可获取商品详情及供应商信息,适用于货源采集、价格监控与竞品分析,助力采购决策。
|
7月前
|
缓存 小程序 前端开发
商城/点餐/家政类小程序源码合集_微信抖音小程序源码开发从入门到精通实战
本文系统讲解如何利用现有源码快速开发商城、点餐、家政类微信/抖音小程序,涵盖环境搭建、核心功能实现、多平台部署与优化,提供完整技术方案。实战导向,助力开发者高效入门与落地。
|
7月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
9月前
|
小程序 安全 JavaScript
构建即时通讯APP内的小程序生态体系:从架构设计到技术实现-优雅草卓伊凡
构建即时通讯APP内的小程序生态体系:从架构设计到技术实现-优雅草卓伊凡
760 1
构建即时通讯APP内的小程序生态体系:从架构设计到技术实现-优雅草卓伊凡
|
7月前
|
人工智能 监控 小程序
【快递鸟】选择对接你的物流商城/小程序的物流API平台
在电商竞争日益激烈的今天,物流体验已成为影响用户留存和复购的关键因素。一个高效、透明、稳定的物流系统,对于物流商城或小程序来说至关重要。然而,自建物流查询系统需要对接众多快递公司,开发周期长、维护成本高、数据整合困难。
375 0
|
9月前
|
人工智能 小程序 前端开发
小程序、网站 vs. APP:成本差异究竟在哪里?技术栈如何决定项目上限?优雅草卓伊凡
小程序、网站 vs. APP:成本差异究竟在哪里?技术栈如何决定项目上限?优雅草卓伊凡
540 0
小程序、网站 vs. APP:成本差异究竟在哪里?技术栈如何决定项目上限?优雅草卓伊凡
|
10月前
|
存储 数据库
《仿盒马》app开发技术分享-- 商品搜索页(搜索记录&商品搜索)(38)
上一节我们新建了商品搜索页,实现了顶部的搜索bar以及下方的推荐搜索列表,这一节我们要新增一个商品搜索记录列表,以及输入内容之后搜索出对应商品的功能,我们还需要保证搜索内容的唯一性,以及搜索记录的本地数据持久化和搜索记录列表的删除
159 2
|
9月前
|
小程序 Java 关系型数据库
圈子系统公众号app小程序系统源码圈子系统带即时通讯 多级圈子系统源码 兴趣小组系统开源 私密圈子系统代码 会员制社区系统
本圈子系统解决方案提供即时通讯、多级圈子、兴趣小组、私密社区及会员制管理功能。支持开源与商业方案,推荐ThinkSNS+、EasyClub及OpenFire等系统,并提供前后端技术选型建议,助力快速搭建社交平台。
514 0
|
11月前
|
存储 人工智能 移动开发
uni-app+vue3接入deepseek-v3搭建跨端ai流式(小程序+app+h5)
基于Uniapp+Vue3+Markdown接入DeepSeek-V3聊天大模型,支持编译到H5+小程序+App端。实现流式输出、支持亮色/暗黑主题、代码高亮、会话本地存储等功能。
2036 12
下一篇
开通oss服务