1.实现效果2.实现原理将数据存在storage中。 wx.setStorageSync('search_history', JSON.stringify(this.data.list)) 取数组前15条。 if (wx.getStorageSync('search_history') ){ this.setData({ list:JSON.parse(wx.getStorageSync('search_history') ).slice(0, 15) }) } 并将每次选择的数据移到数组的第一条。 this.data.list.unshift(data); 清空所有历史。 clearHistory() { this.setData({ list:[] }) wx.removeStorageSync('search_history') }, 3.微信小程序中将数据存在storage中,除非用户手动触发,否则不会过期,同理,若想在浏览器中实现,只需将数据存在localStorage中即可。4.代码<view class="head flex-row"> <view class="head_input"> <image src="/img/search_icon.png" class="search_icon"></image> <input type="text" placeholder="搜索" placeholder-class="place_holder" bindconfirm="getData" value="{{search}}"></input> </view> <view class="sha_icon" catchtap="clear_input">取消</view></view><view class="con"> <view class="title">热门搜索</view> <view class="flex-row list"> <block wx:for="{{hot_list}}" wx:key="index"> <view class="c_item color" data-index="{{index}}" catchtap="getSearch">{{item}}</view> </block> </view> <view wx:if="{{list.length>0}}"> <view class="flex-row j_b"> <view class="title">搜索历史</view> <view catchtap="clearHistory" class="clear">清空历史</view> </view> <view class="flex-row list"> <block wx:for="{{list}}" wx:key="index"> <view class="c_item" data-index="{{index}}" catchtap="getSearchOne">{{item}}</view> </block> </view> </view></view> /* pages/jsCase/historySearch/index.wxss */.head { position: fixed; top: 0; left: 0; width: 100%; height: 90rpx; box-sizing: border-box; padding: 0 20rpx; background: #fff; }.head_input { position: relative; flex: 1; margin-left: 12rpx; }.search_icon { position: absolute; top: 50%; left: 0; margin-top: -15rpx; width: 28rpx; height: 30rpx; padding-left: 23rpx; }.head input { height: 60rpx; padding-left: 75rpx; font-size: 28rpx; border-radius: 30rpx; background: #F5F5F5; }.place_holder { font-size: 28rpx; color: #999999; }.sha_icon{ margin-left: 18rpx; font-size: 28rpx; color: #333333; }.con{ padding: 130rpx 20rpx ; }.title{ font-size: 30rpx; font-weight: 600; color: #333333; }.c_item{ font-size: 25rpx; height: 49rpx; line-height: 49rpx; padding: 0 26rpx; background: rgba(131, 183, 253,0.1); border-radius: 31rpx; justify-content: center; margin-bottom: 24rpx; margin-right: 24rpx; white-space:pre; color: #999; }.list{ margin-top: 40rpx; flex-wrap: wrap; }.color{ color: #83B7FD; }.clear{ color: #999; font-size: 25rpx; } Page({ /** * 页面的初始数据 */ data: { hot_list:['杜甫','李白','李清照','姜子牙','万事如意,心想事成'], list:[], }, onShow: function () { if (wx.getStorageSync('search_history') ){ this.setData({ list:JSON.parse(wx.getStorageSync('search_history') ).slice(0, 15) }) } }, getData(e){ let data = e.detail.value.replace(/(^\s*)|(\s*$)/g, "");//去掉前后的空格 if (data.trim() != '') { this.data.list.forEach((key, index) => { if (key == data) { this.data.list.splice(index, 1); } }) this.data.list.unshift(data); this.setData({ list:this.data.list.slice(0,15) }) wx.setStorageSync('search_history', JSON.stringify(this.data.list)) } }, clear_input(){ this.setData({ search:'' }) }, getSearch(e){ let {index}=e.currentTarget.dataset,{hot_list}=this.data; let va=hot_list[index] this.setData({ search:va }) // 将标签存到历史搜索中 this.data.list.forEach((item, index) => { if (item == va) { this.data.list.splice(index, 1); } }) this.data.list.unshift(va); this.setData({ list:this.data.list.slice(0,15) }) wx.setStorageSync('search_history', JSON.stringify(this.data.list)) }, //清空历史 clearHistory() { this.setData({ list:[] }) wx.removeStorageSync('search_history') }, getSearchOne(e){ let {index}=e.currentTarget.dataset,{list}=this.data; let va=list[index] this.setData({ search:va }) this.data.list.forEach((item, index) => { if (item == va) { this.data.list.splice(index, 1); } }) this.data.list.unshift(va); this.setData({ list:this.data.list.slice(0,15) }) console.log(this.data.list) wx.setStorageSync('search_history', JSON.stringify(this.data.list)) } }) |
相关阅读:
春哥团队召开AI数字人源码系统开发研讨会,引领数字化直播新潮流