思路:

1.浏览器缓存永久保存搜索历史数据.

2.页面初始化将数据保存到页面变量中.

3.对搜索历史记录的怎加和删除,要同步到缓存中.

----------------直接看代码----------------

*前端使用的是vue,这里只是代码片段*

1.页面的 div

<!---历史搜索begin---->
<div style="margin-top: 46px">
<div v-if="this.showFlag === true" class="search-history">
<div class="tip-words">
<div style="float: left;">
<h4>搜索历史</h4>
</div>
<div style="float: right;" @click="clearHistoryItems">
<img src="../../img/img/delete-1.png" width="16px"/>
</div>
</div>
<p style="margin-bottom: 10px">&nbsp;</p>
<div v-for="(item,index) in searchHistoryList" :key="index" @click="searchByHistoryKeyWord(item)" class="history-keywords">
&nbsp;&nbsp;{{item}}&nbsp;&nbsp;
</div>
</div>
</div>
<!---历史搜索end---->

2. vue data

data() {
return {
// 搜索历史
searchHistoryList: [],
// 标记显示搜索历史
showFlag: false,
loadShow: false
}
},

3.vue 搜索历史的一些方法

methods: {
showHistory() {
if (this.searchHistoryList.length > 0) {
this.showFlag = true
}
},
// 清空历史记录
clearHistoryItems() {
localStorage.removeItem('historyItems')
this.searchHistoryList = []
this.showFlag = false
},
// 过滤一个结果的空记录添加,过滤空搜索
appendKeywords(value) {
/**
* 1.已经有的关键词不再添加
* 2.添加到数组的首位,若超出10个则删除最后一个
* 3.添加到缓存
*/
var appendFlag = true
if (this.searchHistoryList !== null && this.searchHistoryList !== undefined && this.searchHistoryList.length > 0) {
this.searchHistoryList.forEach(function(currentValue, index) {
if (currentValue === value) {
appendFlag = false
return
}
})
// 判断-添加
if (appendFlag === true) {
// 长度判断
if (this.searchHistoryList.length >= 10) {
this.searchHistoryList.unshift(value)
this.searchHistoryList.pop()
} else {
this.searchHistoryList.unshift(value)
}
localStorage.setItem('historyItems', JSON.stringify(this.searchHistoryList))
}
} else {
this.searchHistoryList = []
this.searchHistoryList.push(value)
localStorage.setItem('historyItems', JSON.stringify(this.searchHistoryList))
}
},
searchByHistoryKeyWord(item) {
this.loadTip = ''
this.queryData.inputInfo = item
// 查询
fetchGetDataByKeyWord(item).then(response => {
// 查询赋值
this.dataList = response.data.body.data
if (this.dataList.length === 0) {
this.loadTip = '没有符合条件数据'
this.showHistory()
} else {
this.loadTip = ''
this.showFlag = false
}
})
} }

vue搜索历史记录缓存实现的更多相关文章

  1. Day12-微信小程序实战-交友小程序-优化“附近的人”页面与serach组件的布局和样式以及搜索历史记录和本地缓存*内附代码)

    回顾/:我们已经实现了显示附近的人的功能了,可以多个人看到附近的人页面了 但是还是要进行优化有几个问题:1.我们用户选择了其他的自定义头像之后,在首页可以看到头像的变化,但是在附近的人中头像会变成报错 ...

  2. js实现前端的搜索历史记录

    最近在对接前台页面(WEB端)时,产品要求需记录下客户的搜索记录,我们是前后台完全分离的项目,根本不能保存的session域中,没办法,虽然作为后台开发,遇到需求就自己研究了一通,先看一下最终效果图, ...

  3. 示例vue 的keep-alive缓存功能的实现

    本篇文章主要介绍了vue 的keep-alive缓存功能的实现,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. Vue 实现组件信息的缓存 当我们 ...

  4. Vue计算属性缓存(computed) vs 方法

    Vue计算属性缓存(computed) vs 方法 实例 <div id="example"> <p>Original message: "{{ ...

  5. Android搜索功能的案例,本地保存搜索历史记录......

    开发的APP有一个搜索功能,并且需要显示搜索的历史记录,我闲暇之余帮她开发了这个功能,现把该页面抽取成一个demo分享给大家. 实现效果如图所示:  本案例实现起来很简单,所以可以直接拿来嵌入项目中使 ...

  6. Android用AutoCompleteTextView实现搜索历史记录提示

    简介 在我们平常上网的时候经常会用到谷歌或百度,在输入框中输入我们想要输入的信息就会出现其他与其相关的提示信息,非常方便.这种效果在 Android中是用AutoCompleteTextView实现的 ...

  7. vue页面是否缓存的两种方式

    第一种 <keep-alive> <router-view v-if="$route.meta.keepAlive"></router-view> ...

  8. layui 数据表格+分页+搜索+checkbox+缓存选中项数据

    在做数据表格的时候遇到了很多坑, 今天整理一下方便以后使用. 主要功能是使用数据表格, 做分页,做搜索,  还有checkbox,  支持全选. 当选中一些数据的时候, 数据切换页面数据在切换回来后, ...

  9. vue中如何缓存一些页面

    在vue中,有时候我们只想缓存页面中的一些组件或页面,这个时候怎么办呢,我们就需要用判断来加载keep-alive. 例如: // router.js { path: "/driving_l ...

  10. vue的组件缓存(返回页面不刷新)

    每次使用返回是页面总是会刷新 导致了一些体验上的不愉快 现在 发现vue中的一个很方便的方法还可以用来优化性能就是: keep-alive缓存组件 <router-view v-if=" ...

随机推荐

  1. 架构演化学习思考(4) --- IOC的学习认识

    架构演化学习思考(4) IOC的学习认识[1] IOC相关概念认识 什么是IOC? IOC全称为 Inversion Of Control ,即控制反转.它是一种控制思想,可以解释为类和类之间的依赖关 ...

  2. 用海豚调度器定时调度从Kafka到HDFS的kettle任务脚本

    在实际项目中,从Kafka到HDFS的数据是每天自动生成一个文件,按日期区分.而且Kafka在不断生产数据,因此看看kettle是不是需要时刻运行?能不能按照每日自动生成数据文件? 为了测试实际项目中 ...

  3. 面试官:说说volatile应用和实现原理?

    volatile 是并发编程中的重要关键字,它的名气甚至是可以与 synchronized.ReentrantLock 等齐名,也是属于并发编程五杰之一. 需要注意的是 volatile 并不能保证原 ...

  4. 【单调栈+倍增】[P7167 [eJOI2020 Day1] Fountain

    [单调栈+倍增][P7167 [eJOI2020 Day1] Fountain 思路 用单调栈处理每个圆盘溢出后流到的第一个位置,然后倍增优化. 代码 #include <bits/stdc++ ...

  5. SMU Summer 2023 Contest Round 7

    SMU Summer 2023 Contest Round 7 A. Two Rival Students 答案不能大于 \(n-1\): 如果竞争对手之间的当前距离小于 \(n - 1\) ,我们总 ...

  6. 如何使用Typora写出自己的第一个博客

    markdown的使用说明 一.标题 语法:# 这是一级标题 ##这是二级标题...... 代码: # 这是一级标题 ## 这是二级标题 快捷键: Ctrl+数字:数字1-6可以快速将选中的文本调成对 ...

  7. vscode使用说明

    # 要经常保存 # centos打开vscode方式 普通用户:[bw@localhost ~]$ /usr/share/code/bin/code 超级用户:[root@localhost shar ...

  8. PG数据库导致断电/重启无法正常启动问题排查

    PG数据库导致断电/重启无法正常启动问题排查 一.问题 数据库断电后,启动PG数据库后无法正常启动,报"psql: could not connect to server: No such ...

  9. 【DVWA】搭建安全测试环境

    一.搭建DVWA环境 用docker输入命令: docker run -d --name zc_dvwa -p 8081:80 vulnerables/web-dvwa 安装完成: 输入地址:http ...

  10. Html 使用scss爆红

      使用     <style  lang="less" scoped> </style>   即可