vue 商品多规格实现

前几天有个电商系统需要实现商品多规格的功能 貌似记得在刚毕业时被这个搞得死去活来 现在写起来发现还是很简单的 用vue简单的去实现了下功能仅供参考

 

 

 

 

 

 点击查看效果 

github源码 记得star

 

发现一个小小个问题貌似是很多人在做 索性就把之前项目里面的一个给复制出来供大家参考

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
实现商品规格组件可以分为以下几个步骤: 1. 定义数据结构 首先需要定义商品的数据结构,包括商品名称、价格、库存等基本信息,以及多个规格,每个规格包含规格名称、选项列表等信息。可以使用 TypeScript 的接口来定义数据结构。 ```typescript interface Product { name: string; price: number; stock: number; specs: Spec[]; } interface Spec { name: string; options: Option[]; } interface Option { name: string; value: string; } ``` 2. 创建组件 创建一个商品规格组件,包含商品信息和规格选择等界面元素。可以使用 Vue 3 的新特性 `setup()` 函数来创建组件。 ```vue <template> <div class="product-specs"> <h2>{{ product.name }}</h2> <p>价格:{{ product.price }}</p> <p>库存:{{ product.stock }}</p> <div v-for="spec in product.specs" :key="spec.name"> <h3>{{ spec.name }}</h3> <div v-for="option in spec.options" :key="option.value"> <input type="radio" :name="spec.name" :value="option.value" v-model="selected[spec.name]"> {{ option.name }} </div> </div> <button @click="addToCart">加入购物车</button> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; import { Product, Spec } from './types'; export default defineComponent({ name: 'ProductSpecs', props: { product: { type: Object as () => Product, required: true } }, setup(props) { const selected = {} as Record<string, string>; function addToCart() { // TODO: add to cart } return { selected, addToCart }; } }); </script> ``` 3. 实现选项选择 在组件的 `setup()` 函数中,定义一个 `selected` 对象来存储用户选择的规格选项。然后在模板中,使用 `v-for` 循环渲染规格和选项,并使用 `v-model` 指令将用户选择的选项绑定到 `selected` 对象中。 ```vue <template> <div class="product-specs"> ... <div v-for="spec in product.specs" :key="spec.name"> <h3>{{ spec.name }}</h3> <div v-for="option in spec.options" :key="option.value"> <input type="radio" :name="spec.name" :value="option.value" v-model="selected[spec.name]"> {{ option.name }} </div> </div> ... </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; import { Product, Spec } from './types'; export default defineComponent({ name: 'ProductSpecs', props: { product: { type: Object as () => Product, required: true } }, setup(props) { const selected = {} as Record<string, string>; return { selected }; } }); </script> ``` 4. 实现加入购物车 在组件的 `setup()` 函数中,定义一个 `addToCart()` 方法,当用户点击加入购物车按钮时,将选中的规格和数量添加到购物车中。可以使用 Vuex 管理购物车状态,或者通过事件派发通知父组件更新购物车状态。 ```vue <template> <div class="product-specs"> ... <button @click="addToCart">加入购物车</button> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; import { Product, Spec } from './types'; import { useStore } from 'vuex'; export default defineComponent({ name: 'ProductSpecs', props: { product: { type: Object as () => Product, required: true } }, setup(props) { const store = useStore(); const selected = {} as Record<string, string>; function addToCart() { const specs = Object.entries(selected).map(([name, value]) => ({ name, value })); store.dispatch('cart/addItem', { product: props.product, specs }); } return { selected, addToCart }; } }); </script> ``` 5. 样式调整 最后,可以根据实际需求对组件的样式进行调整,使其更加美观和易用。可以使用 CSS 或者 UI 库来实现样式调整。 以上是一个简单的商品规格组件的实现过程,可以根据实际需求进行修改和扩展。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值