vue前端搜索功能如何实现(使用Vue3+Vant组件实现App搜索历史记录功能示例代码)
类别:编程学习 浏览量:613
时间:2021-11-05 14:03:11 vue前端搜索功能如何实现
使用Vue3+Vant组件实现App搜索历史记录功能示例代码最近在开发一款新的app项目,我自己也是第一次接触app开发,经过团队的一段时间研究调查,决定使用Vue3+Vant前端组件的模式进行开发,vue2开发我们已经用过几个项目了,所以决定这一次尝试使用Vue3来进行前段开发。
我刚开始负责搜索功能的开发,有历史搜索记录的需求,一开始我认为这是记录的存储信息也会放在一个数据库表里面,但经过一番调查,发现并不是这样,而是要存储在本地。但是网上的方法也并没有完全解决问题,经过一番尝试,终于给搞好了,话不多说,直接上效果图。
初始化不显示历史搜索记录
回车搜索进入详情页面
历史记录页面
清除历史记录
首先创建一个js文件
这个js文件主要包括了增加历史记录信息,删除所有历史记录信息的功能
export default { // 添加搜索首页历史查询记录 addSearchHistory(state, payload) { // list中包含该记录的时,删除 const index = state.searchHistoryList.indexOf(payload); if (index > -1) { state.searchHistoryList.splice(index, 1); } state.searchHistoryList.unshift(payload); // 历史记录中最大记20个记录 const count = state.searchHistoryList.length; state.searchHistoryList.splice(20, count); }, // 清除搜索首页历史查询记录 clearSearchHistory(state) { state.searchHistoryList = []; }, };
Vue代码块
<template> <!-- 搜索框 --> <search-bar @searchClick="searchClick" :placeholderValue="state.placeholderValue" :searchVal="state.searchVal"> </search-bar> <li class="search"> <!-- 搜索历史 --> <li class="history" v-if="state.isShowHistory"> <span class="proHot">搜索历史</span> <span class="delHotSearch" @click="delHostClick">清除历史</span> <!-- 存放历史记录信息 --> <li class="searchBtn-li"> <span v-for="(item, index) in state.historyList" :key="index" class="searchValBtn" > <van-button round size="small" @click="searchValClick(item)" >{{ item }} </van-button> </span> </li> </li> </li> </template> <script> import { onMounted, reactive, getCurrentInstance, } from 'vue'; import { Toast, Dialog } from 'vant'; import searchBar from '@/components/SearchBar.vue'; import { useRouter } from 'vue-router'; import { useStore } from 'vuex'; export default { components: { searchBar, }, setup() { const router = useRouter(); const store = useStore(); const { proxy } = getCurrentInstance(); const state = reactive({ isShowHistory: '', // 是否显示历史记录 searchVal: '', // 搜索关键字 placeholderValue: '搜索产品/资讯/标准/成分/企业', historyList: [], // 历史搜索数据 }); // 回车搜索 const searchClick = (val) => { store.commit('addSearchHistory', val); // router.push({ path: '/search-detail', query: { searchVal: val } }); }; // 清除历史记录 const delHostClick = async () => { Dialog.confirm({ message: '确定要删除历史搜索吗?', }).then(() => { store.commit('clearSearchHistory', store); state.isShowHistory = false; Toast({ message: '删除成功', position: 'bottom', }); }); }; // 初始化获取历史搜索记录信息 onMounted(async () => { // 获取历史搜索信息 state.historyList = store.state.searchHistoryList; // 判断初始化是否显示历史搜索 if (state.historyList.length > 0) { state.isShowHistory = true; } else { state.isShowHistory = false; } }); return { state, searchClick, delHostClick, }; }, }; </script> <style lang="less" scoped> </style>
Vue代码直接粘贴复制的话可能没法直接用,因为这里面有好多业务代码已经删除,留下的主要是历史搜索记录的代码。主要有三个重点:
引入useStore
import { useStore } from 'vuex'; const store = useStore();
初始化检索历史搜索记录
// 初始化获取历史搜索记录信息 // 每次加载这和页面都会首先调用这个方法,来取最新的信息 onMounted(async () => { // 获取历史搜索信息 state.historyList = store.state.searchHistoryList; // 判断初始化是否显示历史搜索 if (state.historyList.length > 0) { state.isShowHistory = true; } else { state.isShowHistory = false; } })
搜索框触发搜索事件将搜索信息存放在Store中
// 子组件发射一个事件,父组件调用 const searchClick = (val) => { // 将搜索值放入历史记录中 store.commit('addSearchHistory', val); // 路由跳转可以忽略 // router.push({ path: '/search-detail', query: { searchVal: val } }); };
清空历史记录
// 清除历史记录 const delHostClick = async () => { Dialog.confirm({ message: '确定要删除历史搜索吗?', }).then(() => { // 清空历史记录信息 store.commit('clearSearchHistory', store); state.isShowHistory = false; Toast({ message: '删除成功', position: 'bottom', }); }); };
以上就是使用Vue3+Vant组件实现App搜索历史记录功能的详细内容,更多关于vue 搜索历史记录的资料请关注开心学习网其它相关文章!
您可能感兴趣
- vue原理详解(vue响应式原理与双向数据的深入解析)
- vue虚拟dom如何转换成真实dom的(vue中对虚拟dom的理解知识点总结)
- 小白vue教学(尤大大新活petite-vue的实现)
- vue 选中背景高亮(vue 如何设置背景颜色及透明度)
- vue 计算一段时间的月份和天数(vue实现指定日期之间的倒计时)
- vue浏览pdf文件(如何在vue中使用pdfjs预览pdf文件)
- vue动态列表布局(vue项目实现左滑删除功能完整代码)
- vue界面自动生成(Vue中实现3D标签云的详细代码)
- vue路由跳转自动定位在哪里(Vue路由this.route.push跳转页面不刷新的解决方案)
- vue开发的购物车0.1加0.2(vue实现可改变购物数量的购物车)
- vue3中的setup的参数(Vue3中ref与reactive的详解与扩展)
- vue封装组件技巧(浅谈vue中所有的封装方式总结)
- vuecli配置环境变量(Vue CLI中模式与环境变量的深入详解)
- vue轮播图代码(vue实现无缝轮播效果跑马灯)
- vue前台解析pdf文件流(Vue实现在线预览pdf文件功能利用pdf.js/iframe/embed)
- vue3 动态生成组件(如何在vue3.0+中使用tinymce及实现多图上传文件上传公式编辑功能)
- 中国留学生都是富二代吗()
- 我们现在吃的苹果是哪里来的 原来现代苹果引入中国仅有一百多年(我们现在吃的苹果是哪里来的)
- 买绿宝不能只挑黄绿色 菜农教你3招挑,个个皮薄肉脆,香甜爆汁(买绿宝不能只挑黄绿色)
- 大果肉搭配薄瓜皮, 绿宝 脆甜爽口,不愧是甜瓜中的 佼佼者(大果肉搭配薄瓜皮)
- 河南尉氏县因地制宜发展果蔬种植 水坡镇绿宝甜瓜变 金瓜(河南尉氏县因地制宜发展果蔬种植)
- 谢广坤,你这么欺负谢腾飞,良心不会痛吗(你这么欺负谢腾飞)
热门推荐
- python网页自动化selenium(python利用selenium进行浏览器爬虫)
- linux搭建本地yum源配置详细步骤(linux 配置本地yum源,配置国内yum源,配置epel源的步骤)
- html5表单元素自带验证功能(纯CSS3实现表单验证效果非常不错)
- sqlserver如何设置定时备份(SQL Server使用脚本实现自动备份的思路详解)
- 还原NuGet程序包
- docker镜像配置的挂载路径(docker挂载本地目录和数据卷容器操作)
- 云服务器的巧妙用法(云服务器的技术是如何实现的?)
- jspromise原理(JavaScript使用promise处理多重复请求)
- sql数据拆分插入另一个表(Sql Server数据把列根据指定内容拆分数据的方法实例)
- 云服务器9兆带宽的上传速度是多少(云服务器网速多少怎么计算?云服务器的1兆带宽是多少的?)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9