vuex做购物车功能
先创建一个cart组件
<template>
<div>
<ListItem></ListItem>
</div>
</template> <script>
import ListItem from "./ListItem"; export default {
components: {
ListItem
},
data() {
return {}
},
// 在父组件中获取购物车数据
mounted() {
let url = 'http://localhost:8080/data/cart.json'
this.$axios.get(url).then(ret => {
// 给vuex发送一个异步请求,更新数据 vuex actions
this.$store.dispatch('cartData', ret.data)
})
}
}
</script>
在store文件夹index里面写上
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
// 数据源
state: {
cartData: [],
// 购物车总价格
cartTotalPrice: 0,
},
// 相当于组件中的计算属性
getters: {
// 这里是小计
cartData(state) {
return state.cartData.map(item => {
item.['total'] = item.price * item.num
return item
})
},
// 计算总价格
cartTotalPrice(state){
/* 开始可以这样写就是计算数量和价格 得出总价格
let total = 0
state.cartData.forEach(item => {
total += item.price * item.num
})
return total
*/
// prev 初始值 => 值取参2的值,当循环第2次时就是return和上一次返回值
// next 当前循环的对象
// 用于聚合运算 提高map reduce
return state.cartData.reduce((prev,next) => {
return prev + next.price * next.num
},0)
}
},
mutations:{
// 修改数据源
setCartData(state,data){
state.cartData = data
},
// 给数量加一
incr(state,index){
state.cratData[index].num++
},
// 给数量减一
decr(state,index){
state.cratData[index].num--
}
},
actions:{
cartData({commit},data){
// 让mutations更新state数据
commit('setCartData',data)
},
incr({commit},index){
commit('incr',index)
},
decr({commit},index){
commit('decr',index)
}
},
modules:{}
})
再创建ListItem组件 这个就是点击增加和删除功能的组件
<template>
<div>
<ul>
<!-- 直接使用计算属性里面的cartData数据 -->
<li v-for="(item, index) in cartData" :key="item.id">
<span>{{ item.name }}</span>
<span>{{ item.price }}</span>
<span>
<button @click="incr(index)">+++</button>
<input type="text" v-model="item.num" />
<button @click="decr(index, item.num)">---</button>
</span>
<span>小计:{{ item.total }}</span>
</li>
</ul>
<Total></Total>
</div>
</template> <script>
import { mapGetters } from 'vuex'
import Total from './Total'
export default {
components: { Total },
// 子组件中得到父组件中吧数据写入到vuex中的state数据 从而实现了组件间的通信(传值)
computed: {
...mapGetters(['cartData'])
},
methods: {
// index当前数据对象的索引号
incr(index) {
this.$store.dispatch('incr', index)
},
decr(index, num) {
if (num > 1) {
this.$store.dispatch('decr', index)
}
}
}
}
</script> <style></style>
再创建Total组件就是总计的组件
<template>
<div>
总计:{{ cartTotalPrice }}
</div>
</template> <script>
import {mapGetters} from 'vuex'
export default {
computed:{
...mapGetters(['cartTotalPrice'])
}
}
</script> <style scoped> </style>
这样每个的小计和全部加起来的价格都被vuex管理起来了
vuex做购物车功能的更多相关文章
- 用vuex实现购物车功能
效果图 展示目录结构 product组件(纯静态代码) cart组件(纯静态代码) info组件(纯静态代码) 完成以上的三个组件,现在要开始调用这些组件,在App.vue中调用 如果你的姿势正确的话 ...
- vuex实现购物车功能
购物车功能描述: 1. 点击+,-按钮,“已选:xx件”随之增减 2. checkbox选中时,当前项的已选数量增加到头部“已选择xx件”中,未选中时数量不计入 代码: 服务端 node+koa+ko ...
- 基于vue2.0打造移动商城页面实践 vue实现商城购物车功能 基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
基于vue2.0打造移动商城页面实践 地址:https://www.jianshu.com/p/2129bc4d40e9 vue实现商城购物车功能 地址:http://www.jb51.net/art ...
- Vue+Vant+Vuex实现本地购物车功能
通常,我们做移动端商城的时候,通常会有购物车模块,那购物车模块有两种实现方式,一是储存在后台通过接口获取到购物车信息,二是存在用户手机本地,第一种方法只要调用接口获取比较简单,这里介绍的是第二种方法, ...
- Android 购物车功能的实现
首先,众所周知,ListView是Android最常用的控件,可以说是最简单的控件,也可以说是最复杂的控件. 作为一个Android初级开发者,可能会简单的ListView展示图文信息. 作为一个有一 ...
- ASP.NET之电子商务系统开发-2(购物车功能)
一.前言 继上次的首页数据列表后,这是第二篇.记录一下购物车这个比较庞大的功能,可能实现的方法跟其他人有点不一样,不过原理都差不多,是将cookie存数据库里面的. 二.开始 首先看一下购物车流程及对 ...
- Vue(小案例_vue+axios仿手机app)_Vuex优化购物车功能
一.前言 1.用vuex实现加入购物车操作 2.购物车详情页面 3.点击删除按钮,删除购物详情页面里的对应商品 二.主要内容 1.用vuex加入购物车 (1)在src ...
- vue实战记录(三)- vue实现购物车功能之渲染商品列表
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(三) GitHub:sue ...
- vue实现淘宝购物车功能
淘宝购物车功能,效果如下图 非常简单的逻辑,没有做代码的封装,代码如下 <div class="list-container"> <div class=" ...
- php 实现简单购物车功能(2)
上一篇的时候只是写了简单的加入购物车功能,购物车中产品的删除.提交订单后,库存的减少 以及客户账户的余额都没有完善, 这一篇是接着完善上一篇的,上一篇写到了购物车中删除的功能了,为了使删除的代码少敲一 ...
随机推荐
- 力扣597(MySQL)-好友申请Ⅰ:总体通过率(简单)
题目: 此表没有主键,它可能包含重复项.该表包含发送请求的用户的 ID ,接受请求的用户的 ID 以及请求的日期. 此表没有主键,它可能包含重复项.该表包含发送请求的用户的 ID ,接受请求的用户的 ...
- App隐私合规“免费”自动化检测
简介: App隐私合规检测提供了全面的隐私合规检测报告和专家建议,从确保形式合规(隐私政策文本合规性)及实质合规(代码层合规性)的一致性,从个人信息收集.权限使用场景.超范围采集.隐私政策.三方SDK ...
- 好的 MySQL 兼容性可以做到什么程度? PolarDB-X 如何做生态兼容
简介: 2003 年淘宝网成立之后,业务飞速发展,其后台架构也进行了多次迭代.2009 年之前,淘宝网后台的数据库架构是经典的 IOE 组合.IOE 是指 IBM 的小型机. Oracle 的数据库加 ...
- CDN应用进阶 | 正确使用CDN 让你更好规避安全风险
为了帮助用户更好地了解和使用CDN产品,CDN应用实践进阶系统课程开课了.12月17日,阿里云CDN产品专家彭飞在线分享了<正确使用CDN,让你更好规避安全风险>议题,内容主要包括以下几个 ...
- 阿里云重磅发布业务中台产品 BizWorks,中台发展进入下一个阶段
简介: 业务中台产品BizWorks重磅发布,这可以看作是阿里云在 "做厚中台" 战略上继 "云钉一体"之后的又一个新动作! 10 月 19 日,2021 云 ...
- dotnet 给 NuGet 包加上 Aliases 别名解决类型冲突
有时某个相同命名空间相同名字的类型被两个不同的 NuGet 包定义了,尽管这是非常少见的事情,咱需要使用到其中的一个 NuGet 包的类型,但默认情况下将会因为类型冲突而构建不通过.本文将告诉大家如何 ...
- WPF 已知问题 dotnet 6 设置 InvariantGlobalization 之后将丢失默认绑定转换导致 XAML 抛出异常
在设置了 InvariantGlobalization 为 true 之后,将会发现原本能正常工作的 XAML 可能就会抛出异常.本文将告诉大家此问题的原因 这是有开发者在 WPF 仓库上给我报告的 ...
- WPF 基础 2D 图形学知识 判断点是否在线段上
在知道一个使用两个点表示的线段,和另一个点,求另一个点是否在线段上 本文算法属于通用的算法,可以在 WPF 和 UWP 和 Xamarin 等上运行,基本上所有的 .NET 平台都能执行 如下图,如果 ...
- 16.prometheus监控总结
一.监控流程总结 1.需要在被监控的服务器上安装xx_exporter来收集数据(可以是源码安装,最好用docker.docker-compose) 2.添加Prometheus配置,去收集(xx_e ...
- docker容器资源配额
1.docker 容器控制CPU docker通过cgroup来控制容器使用的资源限制,可以对docker限制的资源包括cpu.内存.磁盘 1.1 指定docker容器可以使用的cpu份额 # 查看配 ...