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)
上一篇的时候只是写了简单的加入购物车功能,购物车中产品的删除.提交订单后,库存的减少 以及客户账户的余额都没有完善, 这一篇是接着完善上一篇的,上一篇写到了购物车中删除的功能了,为了使删除的代码少敲一 ...
随机推荐
- 面试题45(Java)-把数组排成最小的数(中等)
题目: 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. 示例 1: 输入: [10,2] 输出: "102" 示例 2: 输入: [ ...
- 阿里云2020上云采购季,你最pick哪个产品组合?
阿里云2020上云采购季如火如荼进行中,活动还剩最后10天啦,你的云产品都买好了吗? 还没买的,还没逛的,请戳:https://www.aliyun.com/sale-season/2020/proc ...
- 如何在零停机的情况下迁移 Kubernetes 集群
简介:本文将通过集群迁移的需求.场景以及实践方式,介绍如何基于阿里云容器服务 ACK,在零停机的情况下迁移 Kubernetes 集群. 作者:顾静(子白)|阿里云高级研发工程师:谢瑶瑶(初扬)|阿 ...
- dotnet 部署 github 的 Action 进行持续集成
被微软收购的 GitHub 现在十分土豪,提供了免费的服务器给咱构建.刚好微软对 dotnet 的支持是特别好的,毕竟还算半个自家的东西,大概只需要 3 分钟就可以在 github 上通过 Actio ...
- 2019-11-29-dotnet-代码调试方法
title author date CreateTime categories dotnet 代码调试方法 lindexi 2019-11-29 8:50:0 +0800 2019-6-5 9:4:4 ...
- Solution Set - NOI真题
NOI2024 RP++! NOI2018 Day1T1 Link&Submission. 考虑一个最高的水位线使所有点通过没有积水的边就可以连通,也就是求出了一棵海拔的最大生成树.会发现只有 ...
- neovim 使用系统剪贴板
neovim 使用系统剪贴板 1.vim 与 neovim 使用系统剪切板的不同 Nvim has no direct connection to the system clipboard. Inst ...
- 对C语言符号的一些冷门知识运用的剖析和总结
符号 目录 符号 注释 奇怪的注释 C风格的注释无法嵌套 一些特殊的注释 注释的规则建议 反斜杠'\' 反斜杠有续行的作用,但要注意续行后不能添加空格 回车也能起到换行的作用,那续行符的意义在哪? 反 ...
- python教程3.3:字符和编码
1.二进制 计算机只能存储和识别二进制,但是人类常用的字母.数字.汉字怎么用计算机存储和识别呢? 人类强行约定一个对应表,把数字.字母和数字进行对应上,这样就可以用二进制表示字母和数字了. 2.ASC ...
- js不同类型比较
有布尔 先把布尔转为number 数字和字符串 字符串转number,如果前导为0会被忽略,空字符串转换成0,非数字字符串或其他转为NaN 对象和非对象 对象valueOf获取基本类型,对象转为字符串 ...