uniapp中实现搜索功能和历史记录

html部分

		<view class="inputBox">
			<view class="input_box d-flex a-center">
				<uni-icons type="search" size="20"></uni-icons>
				<input class="flex-1" type="text" v-model="kw" placeholder="请输入搜索内容" @input="input" />
			</view>
		</view>
	<!-- 搜索历史 -->
		<view class="history-box" v-else>
			<view class="history-title">
				<text>搜索历史</text>
				<uni-icons type="trash" size="17" @click="cleanHistory"></uni-icons>
			</view>
			<view class="history-list">
				<uni-tag :text="item" v-for="(item, i) in historys" :key="i" @click="gotoGoodsList(item)"></uni-tag>
			</view>
		</view>

js部分

<script>
	export default {
		data() {
			return {
				timer: null,
				kw: "",
				searchResults: [],
				historyList: []
			}
		},
		onLoad() {
			 this.historyList = JSON.parse(uni.getStorageSync('kw') || '[]')
		},
		computed: {
			//将最新的搜索记录添加到数组开头
		  historys() {
		    return [...this.historyList].reverse()
		  }
		},
		methods: {
			//搜索函数防抖
			input(e) {
			  clearTimeout(this.timer)
			  this.timer = setTimeout(() => {
			    this.getSearchList()
			  }, 500)
			},
			//搜索
			getSearchList() {
				if (this.kw === '') {
					this.searchResults = []
					return
				}
				let obj = {
					query: this.kw
				}
				this.$myApi.getSearchList(obj).then((res) => {
					this.searchResults = res.data.message;
					this.saveSearchHistory()
				})
			},
			//保存搜索历史并持久化
			 saveSearchHistory() {
			   const set = new Set(this.historyList)
			     set.delete(this.kw)
			     set.add(this.kw)
			     this.historyList = Array.from(set)
			     uni.setStorageSync('kw', JSON.stringify(this.historyList))
			 },
			 // 清空搜索历史记录
			 cleanHistory() {
			   this.historyList = []
			   uni.setStorageSync('kw', '[]')
			 },

		}
	}
</script>

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Uniapp,如果要实现历史记录功能,可以考虑使用云数据库。云数据库是一种托管的服务,可以让你方便地存储和访问数据。在Uniapp使用云数据库,可以通过调用相应的API来实现数据的读取和写入操作。 首先,你可以使用云开发的功能来创建一个云数据库,并在云数据库创建一个用于存储历史记录的集合。 接着,在需要保存历史记录的地方,可以通过调用云数据库的API将数据插入到集合。为了保证数据的唯一性,可以在插入数据时添加UNIQUE约束,防止重复插入。如果已经存在相同的记录,可以通过try-catch语句来执行数据更新操作,确保数据保持最新状态。 例如,你可以使用如下代码来插入数据并更新已存在的记录: ```javascript let insertData = `UPDATE im_record SET time="${item.lastMessage.lastTime}", im_detail="${AESUtil.encrypt(JSON.stringify(item)).replaceAll('/','-')}" WHERE conversationID="${item.conversationID}"`; // 调用云数据库的API来执行插入数据或更新已存在的记录 // ... ``` 这样,在云数据库就可以保存历史记录,并且确保数据的唯一性。 通过使用云数据库,你可以在Uniapp实现方便的历史记录功能,并且避免了手动处理数据的复杂性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [uniapp 使用sqlite存储聊天记录篇](https://blog.csdn.net/python181/article/details/124142723)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值