当前位置: 首页 > news >正文

vuex_cart案例

json-server使用
在目录下新建db文件夹=>里面新建index.json
index.json

{"cart": [{"id": 100001,"name": "低帮城市休闲户外鞋天然牛皮COOLMAX纤维","price": 128,"count": 6,"thumb": "https://yanxuan-item.nosdn.127.net/3a56a913e687dc2279473e325ea770a9.jpg"},{"id": 100002,"name": "网易味央黑猪猪肘330g*1袋","price": 39,"count": 15,"thumb": "https://yanxuan-item.nosdn.127.net/d0a56474a8443cf6abd5afc539aa2476.jpg"},{"id": 100003,"name": "KENROLL男女简洁多彩一片式室外拖","price": 128,"count": 3,"thumb": "https://yanxuan-item.nosdn.127.net/eb1556fcc59e2fd98d9b0bc201dd4409.jpg"},{"id": 100004,"name": "云音乐定制IN系列intar民谣木吉他","price": 589,"count": 1,"thumb": "https://yanxuan-item.nosdn.127.net/4d825431a3587edb63cb165166f8fc76.jpg"}],"friends": [{"id": 1,"name": "zs","age": 18},{"id": 2,"name": "ls","age": 19},{"id": 3,"name": "ww","age": 20}],"arr": [{"id": 1,"name": "zhansan"}]
}

在 cmd 终端定位到 db 文件夹目录下
json-server.cmd --watch index.json开启服务模拟服务端接口数据

store/index.js

// 导入vue
import Vue from 'vue'
// 导入vuex
import Vuex from 'vuex'import cart from './module/cart'Vue.use(Vuex)// 创建仓库store
const store = new Vuex.Store({strict: true,modules: {cart}
})// 导出仓库
export default store

store/modules/cart.js封装cart模块

import request from '@/utils/request'export default {namespaced: true,state: {// 购物车数据[{},{}]list: []},getters: {total (state) {return state.list.reduce((sum, item) => sum + item.count, 0)},totalPrice (state) {return state.list.reduce((sum, item) => sum + item.count * item.price, 0)}},mutations: {updateList (state, newList) {state.list = newList},// 修改数量updateCount (state, payload) {// 根据id找到要更新的数据const goods = state.list.find(item => item.id === payload.id)//   更新数量goods.count = payload.count}},actions: {async getList (context) {const res = await request.get('/cart')console.log(res)context.commit('updateList', res)},// 修改数量/*请求方式:patch请求地址:http://localhost:3000/cart/:id请求参数{count:值,price:值}*/async updateCountAsync (ctx, payload) {// 修改后端的数据await request.patch('/cart/' + payload.id, {count: payload.count})//   更新vuex的数据ctx.commit('updateCount', payload)}}
}

App.vue注册并使用子组件,并渲染商品item

<template><div id="app">
<CartHeader></CartHeader>
<CartItem v-for="item in list" :key="item.id" :item="item"></CartItem>
<CartFooter></CartFooter></div>
</template><script>
import CartHeader from '@/components/cart-header.vue'
import CartItem from '@/components/cart-item.vue'
import CartFooter from '@/components/cart-footer.vue'
import { mapState } from 'vuex'
export default {components: {CartHeader, CartItem, CartFooter},created () {this.$store.dispatch('cart/getList')},computed: {...mapState('cart', ['list'])}
}
</script><style lang="less" scoped>
#app{padding: 50px 0;
}
</style>

cart-header.vue封装头部

<template><div class="header-container">购物车案例</div>
</template><script>
export default {name: 'CartHeader'
}
</script><style lang="less" scoped>
.header-container {height: 50px;line-height: 50px;font-size: 16px;background-color: #42b983;text-align: center;color: white;position: fixed;top: 0;left: 0;width: 100%;z-index: 999;
}
</style>

cart-item.vue封装商品item

<template><div class="cart-item"><img :src="item.thumb" alt="" height="100px"><div class="wrapper"><p class="tit">{{ item.name }}</p><div class="box"><button @click="changeCount(-1)">-1</button><div class="count">{{ item.count }}</div><button @click="changeCount(1)">+1</button></div><div class="price">{{ item.price }}</div></div></div>
</template><script>
export default {props: {item: {type: Object}},methods: {changeCount(step) {console.log(this.item)const id = this.item.idconst newCount = this.item.count + stepthis.$store.dispatch('cart/updateCountAsync', { id, count: newCount })}}
}
</script><style scoped >
.cart-item {height: 140px;display: flex;align-items: center;
}.wrapper {margin-left: 10px;
}.box {display: flex;width: 80px;justify-content: space-between;align-items: center;
}.box button {width: 30px;height: 20px;border-radius: 3px;border: 0;background-color: orange;
}.tit,
.box {margin-bottom: 5px;
}
</style>

cart-footer.vue封装底部

<template><div><p>商品总数:{{ totalCount }} | 总价:{{ totalSum }}</p></div>
</template><script>
import { mapGetters } from 'vuex'
export default {computed: {...mapGetters('cart', ['totalCount', 'totalSum'])}
}
</script><style scoped></style>

相关文章:

vuex_cart案例

json-server使用 在目录下新建db文件夹>里面新建index.json index.json {"cart": [{"id": 100001,"name": "低帮城市休闲户外鞋天然牛皮COOLMAX纤维","price": 128,"count": 6,"thumb": "http…...

Linux系统的安装

文章目录 1 Linux介绍1.1 Linux是什么1.2 Linux的特点1.3 Linux的应用1.4 Linux的发行版本1.5 Linux的Shell 2 Linux安装2.1 安装方式2.2 什么是VMware2.3 VMware主要功能2.4 什么是CentOS2.5 VMware与CentOS与Linux的关系2.6 VMware安装CentOS的步骤 1 Linux介绍 1.1 Linux是…...

微服务设计和高并发实践

文章目录 1、微服务的设计原则1.1、服务拆分方法1.2、微服务的设计原则1.3、微服务架构 2、高并发系统的一些优化经验2.1、提高性能2.1.1、数据库优化2.1.2、使用缓存2.1.3、服务调用优化2.1.4、动静分离2.1.5、数据库读写分离 2.2、服务高可用2.2.1、限流和服务降级2.2.2、隔离…...

2023年高教社杯数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…...

Tomcat 集群介绍

一.Tomcat 集群介绍 在实际生产环境中&#xff0c;单台 Tomcat 服务器的负载能力或者说并发能力在四五百左右。大 部分情况下随着业务增长&#xff0c;访问量的增加(并发量不止四五百)&#xff0c;单台 Tomcat 服务器是 无法承受的。这时就需要将多台 Tomcat 服务器组织起来&a…...

Windows右键添加用 IDEA 打开

1.安装IDEA时 安装时会有个选项来添加&#xff0c;如下&#xff1a; 勾选即可 2.修改注册表 安装时未勾选&#xff0c;可以把下面代码中程序路径改为自己的&#xff0c;保存为对应的 idea.reg文件&#xff0c;双击即可 Windows Registry Editor Version 5.00[HKEY_CLASSES…...

Golang 中return和defer执行先后顺序

先给出最终结论&#xff1a; 执行return语句 -> 执行defer函数 -> 函数返回 这里可能会有一个疑问&#xff0c; 执行return语句和函数返回难道不是一回事? Golang语言中函数的return不是原子操作&#xff0c;而是分为了两步&#xff1a; 返回值赋值真正函数返回 Gol…...

业务数据模拟/采集

业务数据模拟/采集 2.2 业务数据模拟 2.2.1 连接MySQL 通过MySQL可视化客户端连接数据库。2.2.2 建表语句 1&#xff09;通过SQLyog创建数据库2&#xff09;设置数据库名称为gmall&#xff0c;编码为utf-8&#xff0c;排序规则为utf8_general_ci3&#xff09;导入数据库结构脚本…...

qt day 5

实现局域网的网络聊天室功能 1>服务器代码 --------------------------------------------------------------- widget.h --------------------------------------------------------------- #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMes…...

Java设计模式之适配器模式

适配器模式&#xff08;Adapter Pattern&#xff09;是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式&#xff0c;它结合了两个独立接口的功能。 这种模式涉及到一个单一的类&#xff0c;该类负责加入独立的或不兼容的接口功能。举个真实的例子&#xff0…...

每天一个工业通信协议(3)2023.8.29 (DAP接口)

文章目录 参考文献1.DAP接口介绍2.DAP接口的2/3pin3.一种DAP接口方案应用的说明,通过两步初始化把JTAG接口变成DAP接口使用4.DAP接口的协议4.1 DAP电报的分类(只用JTAG类电报)4.2 电报格式4.3 DAP有限状态机参考文献 李婧. DAP模块验证组件系统级开发和实现[D]. 陕西:西安电…...

如何将Word转成PDF?试一下这个转换方法

Word转成PDF是现代办公中常见的需求&#xff0c;它可以确保文件的格式和内容在不同平台上保持一致&#xff0c;并且更加方便共享和打印。在这个数字化时代&#xff0c;我们经常需要将Word文档转换为PDF格式&#xff0c;无论是个人用户还是商务用户都会遇到这样的需求。那么如何…...

成都睿趣科技:现在开一家抖音小店还来得及吗

随着社交媒体的迅猛发展&#xff0c;抖音已经成为了一个全球范围内广受欢迎的社交平台。在这个短视频应用上&#xff0c;人们分享着各种各样的内容&#xff0c;从搞笑段子到美食教程&#xff0c;再到时尚搭配和手工艺品制作。随着用户数量的不断增长&#xff0c;很多人都在思考…...

原型链中:为什么Function.proto==Function.prototype?

背景: 在 JavaScript 中&#xff0c;每个函数&#xff08;包括构造函数&#xff09;都是一个对象&#xff0c;而对象都有一个 __proto__ 属性&#xff0c;指向它们的原型。当你创建一个函数时&#xff0c;JavaScript 引擎会自动为该函数创建一个原型对象&#xff0c;并将其关联…...

原生js实现轮播图及无缝滚动

我这里主要说轮播图和无缝滚动的实现思路&#xff0c;就采用最简单的轮播图了&#xff0c;当然实现的思路有很多种&#xff0c;我这也只是其中一种。 简单轮播图的大概结构是这样的&#xff0c;中间是图片&#xff0c;二边是箭头可以用来切换图片&#xff0c;下面的小圆点也可以…...

MP中的字段还可以利用函数来查询拼接sql

//根据value查询GetMapping("getTest")public List<HashMap> getTest() {QueryWrapper<TTest> queryWrapper new QueryWrapper<>();queryWrapper.eq("substr(name,1,2)","99999");List<TTest> list1 testService.list…...

【python爬虫】中央气象局预报—静态网页图像爬取练习

静态网页爬取练习 中央气象局预报简介前期准备步骤Python爬取每日预报结果—以降水为例 中央气象局预报简介 中央气象台是中国气象局&#xff08;中央气象台&#xff09;发布的七天降水预报页面。这个页面提供了未来一周内各地区的降水预报情况&#xff0c;帮助人们了解即将到来…...

数字孪生城市总体架构进一步迭代更新

经过五年来发展&#xff0c;数字孪生城市基本形成“三横四纵”的总体架构&#xff0c;“三横”为新型基础设施、智能运行中枢、孪生应用体系&#xff0c;“四纵”为组织保障体系、标准规范体系、网络安全防线、运营保障体系&#xff0c;具体如下。 数字孪生城市总体架构-来源&a…...

通过 Jetbrains GateWay实现Remote Development

本次环境准备 环境准备&#xff1a;win10、一台安装有树莓派系统的树莓派&#xff08;也可以是其他的服务器&#xff09; 第一步&#xff1a;通过官网下载JetBrains Gateway 官网地址&#xff1a;https://www.jetbrains.com/remote-development/gateway/ 第二步&#xff1a;安装…...

springboot 集成 lucene

简介 数据每分钟产生200条&#xff0c;使用mysql储存。目前有数据超过700M。按照日期查询&#xff0c;按月查询包含每次超过20w条以上&#xff0c;时间比较长。计划使用lucene优化查询&#xff0c;不适用es是因为项目较小&#xff0c;没有更富裕的资源。 基本步骤 引入依赖。…...

免费开源AMD Ryzen调试神器:ZenStatesDebugTool完整使用指南

免费开源AMD Ryzen调试神器&#xff1a;ZenStatesDebugTool完整使用指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...

Mos:三步解决Mac鼠标滚动卡顿,免费享受触控板般丝滑体验

Mos&#xff1a;三步解决Mac鼠标滚动卡顿&#xff0c;免费享受触控板般丝滑体验 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction in…...

深入Keil5编译器:解读#1295-D警告背后的C语言函数原型进化史

深入Keil5编译器&#xff1a;解读#1295-D警告背后的C语言函数原型进化史 当你在Keil5环境下打开一个遗留的单片机项目时&#xff0c;那个看似微不足道的#1295-D: Deprecated declaration警告可能正暗示着一段跨越四十年的编程语言进化史。这个关于函数声明的警告不是Keil5的任…...

嵌入式C语言单元测试实战:Unity框架入门与工程实践

1. 项目概述&#xff1a;为什么嵌入式开发也需要单元测试&#xff1f;在嵌入式开发领域&#xff0c;尤其是使用C语言进行单片机、RTOS或裸机程序开发时&#xff0c;我们常常陷入一种“烧录-看灯-调串口”的循环。代码逻辑稍微复杂一点&#xff0c;比如一个状态机或者一个协议解…...

从零到告警:用Prometheus+SNMP监控华为交换机,并配置Grafana看板与告警规则

从零构建华为交换机智能监控体系&#xff1a;PrometheusSNMP实战指南 当机房里的华为交换机突然宕机时&#xff0c;运维团队往往要面对业务部门的连环追问。传统的人工巡检方式就像用体温计量火山喷发——既滞后又无力。本文将手把手带您搭建从数据采集到告警响应的完整监控闭环…...

3大核心功能构建学术研究知识库:Obsidian科研模板实战指南

3大核心功能构建学术研究知识库&#xff1a;Obsidian科研模板实战指南 【免费下载链接】obsidian_vault_template_for_researcher This is an vault template for researchers using obsidian. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian_vault_template_for_res…...

从IGS文件命名变迁,看GNSS数据处理流程的演进与自动化机遇

从IGS文件命名变迁透视GNSS数据处理的智能化演进 在卫星导航定位领域&#xff0c;IGS&#xff08;国际GNSS服务组织&#xff09;产品文件命名规则的每一次调整都像一面镜子&#xff0c;映射出整个行业的技术演进方向。2022年底从V1.0到V2.0命名规范的升级&#xff0c;绝非简单的…...

从无人机炸机到平稳飞行:IMU椭球拟合校准实战避坑指南

从无人机炸机到平稳飞行&#xff1a;IMU椭球拟合校准实战避坑指南 去年夏天&#xff0c;我在郊外测试一台自组装的四轴无人机时&#xff0c;经历了惊心动魄的一幕——起飞不到30秒&#xff0c;飞行器突然失控翻滚&#xff0c;最终坠毁在草地上。拆解排查后发现&#xff0c;问题…...

告别BiSeNet的臃肿:手把手教你用STDC网络在MMSegmentation中实现更快的实时语义分割

从BiSeNet到STDC&#xff1a;在MMSegmentation中构建高效实时语义分割模型的实战指南 当你在深夜调试一个需要实时反馈的无人机视觉系统时&#xff0c;BiSeNet的多路径结构是否正在消耗你宝贵的计算资源&#xff1f;STDC网络的出现&#xff0c;为这类场景带来了新的可能性。本文…...

终极指南:如何用magnetW一站式聚合20+磁力搜索源快速找到高质量资源?

终极指南&#xff1a;如何用magnetW一站式聚合20磁力搜索源快速找到高质量资源&#xff1f; 【免费下载链接】magnetW [已失效&#xff0c;不再维护] 项目地址: https://gitcode.com/gh_mirrors/ma/magnetW 磁力搜索工具magnetW是一款基于Electron开发的桌面应用&#x…...