vue实现规格选择
Vue实现规格选择功能
在电商或商品展示类项目中,规格选择(如颜色、尺寸等)是常见需求。以下基于Vue 2/3的实现方案:
数据结构设计
典型规格数据结构采用两级嵌套,示例代码:
data() {
return {
specs: [
{
name: "颜色",
values: ["红色", "黑色", "金色"],
selected: null
},
{
name: "内存",
values: ["64G", "128G", "256G"],
selected: null
}
]
}
}
模板渲染
使用v-for循环渲染规格选项:
<div v-for="spec in specs" :key="spec.name">
<h3>{{ spec.name }}</h3>
<button
v-for="value in spec.values"
:key="value"
@click="selectSpec(spec, value)"
:class="{ active: spec.selected === value }"
>
{{ value }}
</button>
</div>
选择逻辑处理
实现规格选择与状态更新:
methods: {
selectSpec(spec, value) {
spec.selected = value;
this.checkCombination();
},
checkCombination() {
// 验证规格组合是否有效
const selectedSpecs = this.specs
.filter(s => s.selected)
.map(s => `${s.name}:${s.selected}`);
console.log("当前选择:", selectedSpecs);
}
}
样式控制
通过CSS增强交互体验:
button {
margin: 5px;
padding: 8px 12px;
border: 1px solid #ddd;
}
button.active {
border-color: #f00;
background-color: #ffeaea;
}
高级功能扩展
对于需要库存联动的场景:
- 使用计算属性生成有效规格组合
- 禁用无库存选项:
computed: { disabledSpecs() { // 根据库存数据返回禁用状态 return {/* ... */}; } }
完整组件示例
export default {
data() {
return {
specs: [/* ... */],
skus: [
{ color: "红色", memory: "64G", stock: 10 },
// 其他SKU组合...
]
}
},
methods: {
isAvailable(specName, value) {
// 检查当前选择组合是否有库存
}
}
}
实际项目中可根据需求添加价格联动、规格图片切换等功能。关键点是维护好规格选择状态与业务数据的关联。







