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

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

文章目录

一、搜索历史的基本结构

  • data 定义数据 存贮搜索历史
  data() {
      return {
        // 输入数据
        inputString: '',
        // 延时器
        timer: null,
        // 搜索建议
        searchSuggest: '',
        // 搜索历史
        histortSearch: ['a','apple','money']
      };
    },
  • 渲染UI结构
 <!-- 搜索历史容器 -->
    <view class="history-list-container">
      <!-- 标题区域 -->
      <view class="history-head-box">
        <text>搜索历史</text>
        <uni-icons type="trash" size="17"></uni-icons>
      </view>
      <!-- 列表区域 -->
      <view class="history-item-container">
        <view class="history-item" v-for="(item,i) in histortSearch" :key="i">
          <uni-tag :text="item" custom-style="background-color:#f9f9f9; color: black;" inverted="true"></uni-tag>
        </view>
      </view>
    </view>
  • 美化样式
  .history-list-container {
    .history-head-box {
      display: flex;
      justify-content: space-between;
      padding: 18rpx;
      border-bottom: 3rpx solid #ebebeb;
      font-size: 28rpx;
      align-items: center;
    }
    .history-item-container {
      display: flex;
      .history-item {
        margin: 10rpx;
      }
    }
  }
  • 效果图片.png

1.1 按需显示

  • (搜索时只显示建议,不显示历史)

图片.png

  • 解决(添加block 判断条件
    <!-- 搜索建议列表容器 -->
    <block v-if="inputString.length != 0">
      <view class="sgg-list-container">
        <navigator class="sgg-item" v-for="(product,i) in searchSuggest" v-bind:key="i"
          :url="'/subpackages/goods_detail/goods_detail?cat_id=' + product.goods_id">
          <view class="sgg-name">{{product.goods_name}}</view>
          <uni-icons type="right"></uni-icons>
        </navigator>
      </view>
    </block>
    <!-- 搜索历史容器 -->
    <block v-if="inputString.length === 0">
      <view class="history-list-container">
        <!-- 标题区域 -->
        <view class="history-head-box">
          <text>搜索历史</text>
          <uni-icons type="trash" size="17"></uni-icons>
        </view>
        <!-- 列表区域 -->
        <view class="history-item-container">
          <view class="history-item" v-for="(item,i) in histortSearch" :key="i">
            <uni-tag :text="item" custom-style="background-color:#f9f9f9; color: black;" inverted="true"></uni-tag>
          </view>
        </view>
      </view>
    </block>

图片.png

二、处理历史搜索关键词

需要做到:

  1. 添加关键词 (push)
  2. 最近时间查询的放在数组第一位(reverse,unshfit)

注意:因为列表是可变的,如果直接对列表使用reverser(),第二两翻转时第二个就变成倒数第二个了,原因在于你翻转之后push元素,应该在列表不变情况push,解决办法有两种,

第一种:翻转显示后,在进行push之前按,再reverse翻转回去在push

第二种...展开列表reverse(此时不改变原列表),此时可以在computed(计算属性,类似数据监听器和过滤器,有缓存机制)中返回reverse的值

  • 建议 使用unshift直接添加第一项
  1. 去重(使用集合性质Set

代码实现(在调取数据成功时调用一下函数

// 添加到历史
      addhistory(){
        this.histortSearch.unshift(this.inputString)
        // this.histortSearch.reverse()
        const res = new Set(this.histortSearch) //创建set对象 需要用new
        this.histortSearch = Array.from(res)
      }
  • 效果:39.gif

三、保存历史记录到本地

由于每次编译都会被清空,所以我们需要保存记录到本地缓存

  1. 使用 uni.setStorageSync(键,值) 将数据存贮在本地
  // 添加到历史
      addhistory() {
        this.histortSearch.unshift(this.inputString)
        // this.histortSearch.reverse()
        const res = new Set(this.histortSearch) //创建set对象 需要用new
        this.histortSearch = Array.from(res)
        // 将存贮数据存贮在本地
        uni.setStorageSync('history', JSON.stringify(this.histortSearch))
      }
    },
  1. onLoad 初始化 导入本地数据
onLoad() {
   this.histortSearch = JSON.parse(uni.getStorageSync ('history') || '[]') // 通过键得到值,JSON解析字符串为数组对象 不存在对象则为空数组 
 },
  • 效果

四、按下trash键清空历史

  • 绑定事件处理函数clearhistory
<uni-icons type="trash" size="17" @click="clearHistory"></uni-icons>
  • clearhistory函数定义
// 清空历史
  clearHistory() {
    this.histortSearch = []
    uni.setStorageSync('history',['']) //必须重新赋值为空数组,只能为数组数据类型
  },
  • 效果
  • 40.gif

五、点击搜索历史跳转到商品详情页

  • 每个标签绑定click事件
<uni-tag :text="item" custom-style="background-color:#f9f9f9; color: black;" inverted="true" @click="gotogoodslist(item)"></uni-tag>
  • 定义事件函数
 // 点击tag事件
gotogoodslist(item){
    uni.navigateTo({
      url:'/subpackages/goods_list/goods_list?query=' + item
  • 效果

41.gif

六、search分支的提交

  • git branch 查看分支
  • git add . 提交到暂存区
  • git commit -m "完成了search的开发" 提交到本地仓库
  • git push origin -u search 提交到远程仓库的search分支
  • git checkout master 切换到主分支
  • git merge search 合并search分支
  • git push 提交到远程仓库主分支
  • git branch -d search 删除search分支

图片.png

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



相关文章
|
29天前
|
小程序 数据可视化 JavaScript
微信小程序:轻松实现时间轴组件
本文介绍了如何在微信小程序中实现一个可视化时间轴组件。该组件适用于展示用户资金流动、投资结算等时间节点,帮助用户直观了解资金去向。时间轴支持自定义节点形状、显示序号、倒序排列等功能,并通过插槽灵活定义动态内容。文中详细介绍了组件的设计与使用方法,以及如何结合动态 slot 实现自定义操作。该组件为展示用户资金信息提供了美观、易用的解决方案。
57 1
微信小程序:轻松实现时间轴组件
|
28天前
|
小程序
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
373 1
|
29天前
|
小程序 搜索推荐 API
微信小程序:自定义关注公众号组件样式
尽管关注公众号组件的样式固定且不可修改,但产品经理的需求却需要个性化的定制。在这种情况下,我们需要寻找解决方案,以满足这些特殊需求,尽管这可能有点棘手。
57 0
微信小程序:自定义关注公众号组件样式
|
1月前
|
小程序 数据可视化 API
低代码可视化-uniapp商城首页小程序-代码生成器
低代码可视化-uniapp商城首页小程序-代码生成器
25 0
|
29天前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
192 3
|
1月前
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
44 0
微信小程序更新提醒uniapp
|
3月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
104 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
3月前
|
小程序 前端开发 JavaScript
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
【避坑宝】是一款企业黑红名单吐槽小程序,旨在帮助打工人群体辨别企业优劣。该平台采用SpringBoot+MybatisPlus+uniapp+uview2等技术栈构建,具备丰富的注释与简洁的代码结构,非常适合实战练习与学习。通过小程序搜索“避坑宝”即可体验。
99 0
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
|
3月前
|
存储 小程序 JavaScript
|
4月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的汉服交易小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的汉服交易小程序的详细设计和实现(源码+lw+部署文档+讲解等)
62 7

热门文章

最新文章