vue实现搜索商品
实现搜索商品功能
在Vue中实现搜索商品功能可以通过以下方法完成,涵盖从数据绑定到结果展示的全流程。
数据绑定与搜索逻辑
创建Vue实例或组件,定义商品数据数组和搜索关键词变量。商品数据可以存储在本地或通过API获取。
data() {
return {
searchQuery: '',
products: [
{ id: 1, name: '商品A', price: 100 },
{ id: 2, name: '商品B', price: 200 },
{ id: 3, name: '商品C', price: 300 }
]
}
}
计算属性过滤商品
使用计算属性实现实时搜索过滤,避免频繁触发方法调用。计算属性会根据searchQuery自动更新过滤结果。
computed: {
filteredProducts() {
return this.products.filter(product => {
return product.name.toLowerCase().includes(this.searchQuery.toLowerCase())
})
}
}
模板与输入绑定
在模板中添加搜索输入框,使用v-model实现双向数据绑定。展示过滤后的商品列表。
<template>
<div>
<input
type="text"
v-model="searchQuery"
placeholder="搜索商品名称"
>
<ul>
<li v-for="product in filteredProducts" :key="product.id">
{{ product.name }} - ¥{{ product.price }}
</li>
</ul>
</div>
</template>
异步数据加载
如果商品数据需要从API获取,可以在created或mounted钩子中发起请求。
async created() {
try {
const response = await axios.get('/api/products')
this.products = response.data
} catch (error) {
console.error('获取商品数据失败:', error)
}
}
性能优化
对于大量商品数据,可以考虑添加防抖处理,减少频繁过滤带来的性能开销。
import { debounce } from 'lodash'
methods: {
handleSearch: debounce(function() {
// 执行搜索逻辑
}, 300)
}
样式增强
添加基础样式提升用户体验,如输入框样式、加载状态和空状态提示。

input {
padding: 8px;
width: 300px;
margin-bottom: 20px;
}
.empty-message {
color: #999;
font-style: italic;
}
以上实现涵盖了Vue中搜索商品的核心功能,可根据实际需求扩展更多特性如分类筛选、价格排序等。






