vue的搜索框实现
基础搜索框实现
在Vue中实现一个基础的搜索框,可以使用v-model绑定输入值,并通过@input或@change事件触发搜索逻辑。
<template>
<div>
<input
v-model="searchQuery"
@input="handleSearch"
placeholder="搜索..."
/>
</div>
</template>
<script>
export default {
data() {
return {
searchQuery: ''
}
},
methods: {
handleSearch() {
// 执行搜索逻辑
console.log('搜索关键词:', this.searchQuery)
}
}
}
</script>
防抖优化
频繁触发搜索会影响性能,可以通过防抖函数(debounce)优化。
methods: {
handleSearch: _.debounce(function() {
console.log('实际搜索:', this.searchQuery)
}, 500)
}
搜索结果显示
结合计算属性实现实时过滤数据。
<template>
<div>
<input v-model="searchQuery" placeholder="搜索..."/>
<ul>
<li v-for="item in filteredItems" :key="item.id">
{{ item.name }}
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
searchQuery: '',
items: [
{ id: 1, name: '苹果' },
{ id: 2, name: '香蕉' },
{ id: 3, name: '橙子' }
]
}
},
computed: {
filteredItems() {
return this.items.filter(item =>
item.name.includes(this.searchQuery)
)
}
}
}
</script>
异步搜索实现
当需要从API获取搜索结果时,可以使用异步方法。
methods: {
async handleSearch() {
try {
const response = await axios.get('/api/search', {
params: { q: this.searchQuery }
})
this.searchResults = response.data
} catch (error) {
console.error('搜索出错:', error)
}
}
}
高级功能扩展
可以添加搜索历史记录功能。
data() {
return {
searchHistory: []
}
},
methods: {
handleSearch() {
if(this.searchQuery && !this.searchHistory.includes(this.searchQuery)) {
this.searchHistory.push(this.searchQuery)
}
// 执行搜索...
}
}
样式优化
使用CSS美化搜索框。
.search-input {
padding: 8px 12px;
border: 1px solid #ddd;
border-radius: 4px;
width: 300px;
font-size: 16px;
}
.search-input:focus {
outline: none;
border-color: #409eff;
}
以上实现方式可以根据具体需求进行组合和调整,构建出适合项目的搜索功能。







