微信小程序实现历史搜索功能

实现样式

实现原理

该功能通过将数据存入localstorage实现

export default {
	data() {
		return {
			historyList: [],//历史记录
            showHistory: true,//是否展示历史记录
        }
    }
}

主要是微信为开发者提供的wx.setStorageSync(string key, any data)方法将数据存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。

wx.setStorageSync('search_history', JSON.stringify(this.historyList));//储存历史记录

清空所有历史

clearHistory() {
   this.historyList=[]; //this.setData({historyList:[]})也可以
   wx.removeStorageSync('search_history')
 },

微信小程序中将数据存在storage中,除非用户手动触发,否则不会过期,同理,若想在浏览器中实现,只需将数据存在localStorage中即可。

注意:storage 应只用来进行数据的持久化存储,不应用于运行时的数据传递或全局状态管理。启动过程中过多的同步读写存储,会显著影响启动耗时

searchIt(){
    if (this.historyList.indexOf(this.searchText) == -1) {//新增
	    if (this.historyList.length == 15) {//控制上限
            //如果已经存在十五条数据,删除最久没搜索过那条
	        this.historyList.splice(this.historyList.length - 1, 1);
	    }
	    this.historyList.unshift(this.searchText);
    } else {//如果之前搜索过,换位,插入到第一位
	    let index = this.historyList.indexOf(this.searchText);
    	this.historyList.splice(index, 1);//删除原先位置的元素
	    this.historyList.unshift(this.searchText);//置顶新元素
    }
    wx.setStorageSync('search_history', JSON.stringify(this.historyList));//储存历史记录
}

 清除/选择 一条搜索历史

//删除一条历史记录
killOneHis(idx){
	this.historyList.splice(idx,1);
},
//选择一条点击搜索
chooseOneHis(str){
	this.searchText=str;
	let idx=this.historyList.indexOf(str);
	this.historyList.splice(idx, 1);
	this.historyList.unshift(str);
	this.searchProductList=[];
	this.seachIt();
},

获取搜索历史

onShow() {
	if (wx.getStorageSync('search_history')) {
		this.historyList = JSON.parse(wx.getStorageSync('search_history'));
	}
}

html

<!-- 搜索 -->
		<view class="inputTop">
			<input v-model="searchText" class="inputTop-open" type="text" placeholder="可搜索产区/品种" @focus="showAllHistory" focus="showHistory" />
			<image @click="seachIt" class="input-button" src="https://cdn.sommcat.com/images/start-button-icon.png"></image>
		</view>
		<!-- 历史记录 -->
		<view v-if="showHistory" style="min-height: 90vh;background-color: #ffffff;">
			<view style="text-align: center;color:#BEBEBE ;font-size: 24rpx;margin:40rpx;">- 搜索历史 -</view>
			<view style="display:flex;justify-content: center;flex-wrap: wrap;margin:0 100rpx;" v-if="historyList.length>0">
				<view v-for="(his,idx) in historyList" :key="idx">
					<view @click="chooseOneHis(his)" class="hisT">
						<view style="margin-right:10rpx;">{{his}}</view>
						<view @click.stop="killOneHis(idx)">X</view>
					</view>
				</view>
			</view>
		</view>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值