当前位置: 首页 > news >正文

uni-app项目实战笔记27--uniapp搜索页面的实现

先来看页面效果:

要求实现的效果:

1.页面由搜索栏+最近搜索+热门搜索组成;

2.当没有搜索结果时要进行必要的提示;

3.最近搜索展示用户的搜索历史,用户输入的搜索条件添加到最近搜索清单中,刷新页面的时候搜索历史保留,可对搜索历史进行删除;

4.当用户点击最近搜索或热闹搜索某一项时,该项填充到搜索栏中。

要想实现上面的效果,需要先安装2个插件:uni-search-bar uv-empty

uni-search-bar为uniapp官方扩展组件,可到这里进行了解更多信息并进行下载安装使用:

uni-app官网

而uv-empty插件则实现搜索结果为空的样式,需要到DCloud 插件市场下载uv-empty 内容为空 全面兼容vue3+2、app、h5、小程序等多端 - DCloud 插件市场

下面是实现过程:

模板代码:

<template><view class="searchLayout"><view class="search"><uni-search-bar @confirm="onSearch"@cancel="onClear"@clear="onClear"focus placeholder="搜索"v-model="queryParams.keyword"></uni-search-bar></view><view><view class="history" v-if="historySearch.length"><view class="topTitle"><view class="text">最近搜索</view><view class="icon" @click="removeHistory"><uni-icons type="trash" size="25"></uni-icons></view></view><view class="tabs"><view class="tab" v-for="tab in historySearch" :key="tab" @click="clickTab(tab)">{{tab}}</view>		</view></view><view class="recommend"><view class="topTitle"><view class="text">热门搜索</view>				</view><view class="tabs">				<view class="tab" v-for="tab in recommendList" :key="tab" @click="clickTab(tab)">{{tab}}</view></view></view></view><view class="noSearch"><uv-empty mode="search" icon="http://cdn.uviewui.com/uview/empty/search.png"></uv-empty></view><view><view class="list"><navigator :url="`/pages/preview/preview`"  class="item" v-for="item in classList" :key="item._id">				<image :src="item.smallPicurl" mode="aspectFill"></image>				</navigator></view>		<view v-if="noData || classList.length"><uni-load-more :status="noData?'noMore':'loading'"/></view></view></view>
</template>

JS代码:

<script setup>
import {ref} from "vue";
import {onLoad,onUnload,onReachBottom} from "@dcloudio/uni-app";//查询参数
const queryParams = ref({	pageNum:1,pageSize:12,keyword:""
})//搜索历史词,从缓存中读取,读取不到则赋值为空数组
const historySearch = ref(uni.getStorageSync("historySearch")|| []);//热门搜索词
const recommendList = ref(["美女","帅哥","宠物","卡通"]);//没有更多
const noData = ref(false);
//没有搜索结果
const noSearch = ref(false);//搜索结果列表
const classList = ref([{_id:123123,smallPicurl:'https://mp-0cb878b7-99ec-44ea-8246-12b123304b05.cdn.bspapp.com/xxmBizhi/20231102/1698905562410_0_small.webp'}
]);//点击搜索,将当前搜索的关键字追加到历史搜索数组中并进行去重
const onSearch = ()=>{historySearch.value =[...new Set([queryParams.value.keyword,...historySearch.value])] // 将当前搜索的关键字保存到缓存中uni.setStorageSync("historySearch",historySearch.value)
}//点击清除按钮
const onClear = ()=>{}//点击标签进行搜索,将标签的值赋给搜索关键字
const clickTab = (value)=>{queryParams.value.keyword = value
}//点击清空搜索记录,清空时需要将缓存和搜索历史数组同时清空
const removeHistory = ()=>{uni.showModal({title:"是否清空历史搜索?",success:res=>{if(res.confirm){uni.removeStorageSync("historySearch"); historySearch.value = []}}})
}//触底加载更多
onReachBottom(()=>{})//关闭有页面
onUnload(()=>{})</script>

http://www.lryc.cn/news/576577.html

相关文章:

  • 手势-handpose的pipeline介绍
  • nt!IoSynchronousPageWrite函数分析之atapi!IdeReadWrite----非常重要
  • 视频序列中的帧间匹配技术 FrameMatcher 详解
  • 智能制造——56页2025 智慧工厂解决方案【附全文阅读】
  • zookeeper Curator(3):Watch事件监听
  • 从单体架构到微服务:微服务架构演进与实践
  • 从台式电脑硬件架构看前后端分离开发模式
  • Spring Boot 3 多数据源改造全流程:Druid、HikariCP 与 dynamic-datasource 实战总结
  • 内网横向-工作流
  • 典型工程应用三
  • [rootme:ctf all the day]Ubuntu 8.04week wp
  • python 项目利用uv管理python包依赖
  • phpstudy 可以按照mysql 数据库
  • cf 禁止http/1.0和http/1.1的访问 是否会更安全?
  • 《自动控制原理 》- 第 1 章 自动控制的基本原理与方式
  • Confluence-测试用例执行规范
  • srs-gb28181 与 SRS 5.0 对 GB28181 国标支持
  • Learning to Prompt for Continual Learning
  • python基础21(2025.6.28)_全栈爬取_车168以及诗词名句案例
  • AUTOSAR图解==>AUTOSAR_AP_EXP_SOVD
  • Linux快速查找文件
  • JVM 之双亲委派机制与打破双亲委派
  • 【安卓Sensor框架-2】应用注册Sensor 流程
  • Everything
  • 深入解析 Electron 核心模块:构建跨平台桌面应用的关键
  • day45 Tensor board使用介绍
  • 【Bluedroid】蓝牙启动之BTM_reset_complete源码解析
  • 虚拟 DOM 与 Diff 算法
  • c++学习(五、函数高级)
  • 【AI智能体】Dify 核心组件从使用到实战操作详解