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)
上一篇的时候只是写了简单的加入购物车功能,购物车中产品的删除.提交订单后,库存的减少 以及客户账户的余额都没有完善, 这一篇是接着完善上一篇的,上一篇写到了购物车中删除的功能了,为了使删除的代码少敲一 ...
随机推荐
- Vue-flask 展示小电影
显示小电影 前端Vue <body> <div id="app"> <button @click="handleLoad"> ...
- SysOM 案例解析:消失的内存都去哪了 !| 龙蜥技术
简介: 这儿有一份"关于内存不足"排查实例,请查收. 文/系统运维 SIG 在<AK47 所向披靡,内存泄漏一网打尽>一文中,我们分享了slab 内存泄漏的排查方式和工 ...
- Dataphin功能:集成——如何将业务系统的数据抽取汇聚到数据中台
简介: 数据集成是简单高效的数据同步平台,致力于提供具有强大的数据预处理能力.丰富的异构数据源之间数据高速稳定的同步能力,为数据中台的建设打好坚实的数据基座. 数据中台是当下大数据领域最前沿的数据建 ...
- [FAQ] edge debug栏的网络里 没有见到 All Fetch/XHR JS CSS 这些东西
一种方式是 打开调试器的设置,重置默认并刷新即可. 另一种方式是把这个 "筛选" 点掉. Tool:揭开网站所用的技术 Link:https://www.cnblogs.com ...
- [Go] godoc 打开本地文档, windows 同样适用
godoc 提供了在无网环境下 浏览官方文档的便利. 示例: $ go get golang.org/x/tools/cmd/godoc $ godoc -http=localhost:6060 Li ...
- Go-Zero微服务快速入门和最佳实践(一)
前言 并发编程和分布式微服务是我们Gopher升职加薪的关键. 毕竟Go基础很容易搞定,不管你是否有编程经验,都可以比较快速的入门Go语言进行简单项目的开发. 虽说好上手,但是想和别人拉开差距,提高自 ...
- 一:大数据架构回顾-Lambda架构
"我们正在从IT时代走向DT时代(数据时代).IT和DT之间,不仅仅是技术的变革,更是思想意识的变革,IT主要是为自我服务,用来更好地自我控制和管理,DT则是激活生产力,让别人活得比你好&q ...
- 微服务 - 作业调度 · Hangfire集成式 · 仪表盘 · DolphinScheduler分布式 · 定义流程
系列目录 微服务 - 1.概念 · 应用 · 架构 · 通讯 · 授权 · 跨域 · 限流 微服务 - 2.IdentityServer4认证授权 · 概念认识 · 运行过程 · 实践应用 微服务 - ...
- gin返回json假数据
package main import ( "github.com/gin-gonic/gin" "encoding/json" "fmt" ...
- docker-compose 安装LNMP
安装DNMP https://github.com/yeszao/dnmp.git https://blog.csdn.net/weixin_34038293/article/details/9427 ...