vuex购物车案例

案例有一个商品列表页和购物车页

商品列表页主要实现商品数据渲染到视图上,还有一个添加到购物车的功能.

购物车页主要是写全选,单选,总计,删除等功能

首先是商品列表页

<template>
	<div class="tj">
		<ul>
			<li class="tjl" v-for="(item,index) in goods">
				<img :src="item.img" alt="">
				<div class="ptype">
					<p>{
  {item.name}}</p>
					<span>¥{
  {item.price}}</span>
					<h3>{
  {item.sales}}人付款</h3>
					<button @click="adds(item)">添加</button>
                    item 可以理解位被adds当作参数拿来用,这里adds用作于添加到购物车的功能
				</div>
			</li>
		</ul>
	</div>
	
</template>
把goods中的数据渲染到视图中,这里就不多说了
export default {
	data() {
		return {
			
		}
	},
    computed(){
        这里是把vuex中的数据映射到vue实例中,使得视图中可以直接拿来用
        goods(){
            this.$store.state.goods
        }
    },
	methods:{
    // this.$store.commit('add',val)是调用mutations中的方法,add是mutations中的方法,val是传递给add的参数,然后重新命名一个函数名接收一下就可以直接使用mutations中的方法了
		adds(val){
			this.$store.commit('add',val) 
		}
	}
}

vue项目中store下的index.js中mutations中的方法
    add(state, val) {
            
			// 添加之前 先判断购物车里面是否有相同的商品
            state.carList.some(ele => ele.id == val.id) 这段代码是作于返回一个true或者false,
			if (state.carList.some(ele => ele.id == val.id)) {
    如果条件为true,就代表购物车里与你当前添加的这条商品是相同的就只让它的数量加1
   ,而不是再让它重新添加一条商品的形式显示
				var carItem = state.carList.find(ele => ele.id == val.id)
				console.log(carItem)
				carItem.num++ // 条件为true 数量加1
			} else {
            // 条件为false的话就以新商品格式添加到购物车
				var obj = {
					name: val.name,
					price: val.price,
					sales: val.sales,
					num: 1,
					id: val.id,
					isChecked: false,
					img: val.img
				}
                obj是仿造一条商品数据,只有商品数量是1,让商品加到购物车的初试数量为1,
				state.carList.push(obj)
			}
		  }
		},

上面商品列表页已经渲染好了接下来是购物车页面

<template>
	<div id="cart">
		<div class="backTop">
			<span @click="back()">返回</span>
			<span>购物车</span>
			<button class="remove" @click="clearRemove()">清空购物车</button>
		</div>
		<ul>
			<li class="tjl" v-for="(item,index) in carLists">
				<span class="int">
                    <input type="checkbox" v-model="item.isChecked"/>        
                </span>
				<img :src="item.img" alt="">
				<div class="ptype">
					<p>{
  {item.name}}</p>
					<span>¥{
  {item.price}}</span>
					<h3>{
  {item.sales}}人付款</h3>
				</div>
				<!-- <button class="remove" @click="removes(item)">删除</button> -->
				<div class="tost">
					<button @click="jian(item)">
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我是一个AI语言模型,无法提供代码示例。但是,我可以简要介绍如何使用Vue3和Vuex实现购物车功能。 首先,需要在Vue3项目中安装Vuex。可以使用以下命令: ```bash npm install vuex ``` 然后,在src目录下创建一个store.js文件来存储Vuex store实例。在store.js文件中,需要导入Vue3和Vuex,并创建一个新的store实例。 ```javascript import { createStore } from 'vuex' const store = createStore({ state: { cart: [] }, mutations: { addToCart(state, item) { state.cart.push(item) }, removeFromCart(state, index) { state.cart.splice(index, 1) } }, getters: { cartTotal(state) { return state.cart.reduce((total, item) => total + item.price, 0) } } }) export default store ``` 在上面的代码中,我们定义了一个状态对象state,其中包含一个名为cart的数组。我们还定义了两个mutation,一个用于将商品添加到购物车中,另一个用于从购物车中删除商品。最后,我们定义了一个getter,用于计算购物车中商品的总价值。 在Vue3项目中,可以通过以下方式将store实例传递给根组件: ```javascript import { createApp } from 'vue' import App from './App.vue' import store from './store' createApp(App).use(store).mount('#app') ``` 现在,我们已经将store实例传递给了根组件,可以在组件中使用Vuex的状态管理功能。例如,在组件中添加商品到购物车中的代码可以如下所示: ```javascript <button @click="addToCart(item)">Add to Cart</button> ... methods: { addToCart(item) { this.$store.commit('addToCart', item) } } ``` 在上面的代码中,我们将addToCart方法映射到一个按钮的点击事件上。当用户点击按钮时,我们将商品对象作为参数传递给addToCart方法,并使用commit方法将该操作提交给store。Vuex会在store中执行addToCart mutation,并将商品对象添加到cart数组中。 同样,我们可以使用Vuex的getter来计算购物车中商品的总价值: ```javascript <template> <div> <p>Cart Total: {{ cartTotal }}</p> </div> </template> <script> export default { computed: { cartTotal() { return this.$store.getters.cartTotal } } } </script> ``` 在上面的代码中,我们使用computed属性将cartTotal getter映射到组件的模板中。当cart数组中的商品数量发生变化时,cartTotal getter会重新计算购物车中商品的总价值,并将其更新到模板中。 以上是使用Vue3和Vuex实现购物车功能的基本流程,具体实现方式可能因项目而异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值