1 回复
针对uni-app仿58同城app搜索组件的需求,我们可以利用uni-app框架提供的丰富组件和API来实现一个功能齐全的搜索组件。以下是一个简单的代码示例,展示了如何实现一个基本的搜索组件,包括搜索输入框、搜索按钮以及搜索结果展示。
首先,在pages/index/index.vue
文件中,我们可以定义搜索组件的结构:
<template>
<view class="container">
<view class="search-bar">
<input
type="text"
placeholder="请输入搜索关键词"
v-model="searchKeyword"
@clear="handleClear"
@input="handleInput"
/>
<button @click="handleSearch">搜索</button>
</view>
<view class="search-results" v-if="searchResults.length > 0">
<view v-for="(result, index) in searchResults" :key="index" class="search-result-item">
{{ result.name }}
</view>
</view>
<view v-else class="no-results" v-if="hasSearched">没有找到相关结果</view>
</view>
</template>
<script>
export default {
data() {
return {
searchKeyword: '',
searchResults: [],
hasSearched: false,
};
},
methods: {
handleInput(e) {
this.searchKeyword = e.detail.value;
},
handleClear() {
this.searchKeyword = '';
this.searchResults = [];
this.hasSearched = false;
},
handleSearch() {
if (this.searchKeyword.trim() === '') {
uni.showToast({ title: '请输入搜索关键词', icon: 'none' });
return;
}
this.hasSearched = true;
// 模拟搜索请求
setTimeout(() => {
this.searchResults = [
{ name: '搜索结果1' },
{ name: '搜索结果2' },
// ...更多搜索结果
].filter(result => result.name.includes(this.searchKeyword));
}, 1000);
},
},
};
</script>
<style>
.container {
padding: 20px;
}
.search-bar {
display: flex;
align-items: center;
margin-bottom: 20px;
}
.search-bar input {
flex: 1;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
}
.search-bar button {
padding: 10px 20px;
margin-left: 10px;
background-color: #007aff;
color: #fff;
border: none;
border-radius: 4px;
}
.search-results {
margin-top: 20px;
}
.search-result-item {
padding: 10px;
border-bottom: 1px solid #ddd;
}
.no-results {
margin-top: 20px;
color: #999;
}
</style>
此代码示例展示了一个基本的搜索组件,包括输入框、搜索按钮和搜索结果展示。搜索功能通过handleSearch
方法模拟了一个异步请求,并在搜索结果中进行了关键词过滤。实际项目中,可以将setTimeout
替换为真实的API请求,如通过uni-app的uni.request
方法调用后端搜索接口。