使用vuex让购物车联动

在这里插入图片描述
在这里插入图片描述
// 1.vuex点击加减触发函数提交仓库把我们请求的数据存到仓库
2.在仓库定义这个函数和对象 把我们存进去的数据存起来
// 3。在我们需要的页面拿出数据,然后循环就可以
// 4.当我们点击加号就触发函数然后在vuex对这个数据进行处理
// 5.对我们点进来的数据进行一个对右边的循环我们只要判断他是否》0,如果是大于0就push到新的数组
6.然后拿到新的数组渲染到购物车里面

这个是goods页面 就是整体的页面 asidelist: [], 是左边要渲染的数据定义
rightlist: [],就是右边要渲染的数组

<template><div class="box"><!-- 左边 --><div class="leftbox"><van-sidebar v-model="activeKey"><van-sidebar-item@click="onChange"v-for="(v,i) in asidelist":title="v.name":key="i":id="'cate' +i"/></van-sidebar></div><!-- 右边 --><div class="rightbox"><div><div v-for="(v,i) in rightlist" :key="i" :id="'list' +i"><h3>{{v.name}}</h3><van-cardv-for="(v2,i2) in v.foods":key="i2":num="v2.num":price="v2.price":desc="v2.goodsDesc":title="v2.name":thumb="v2.imgUrl"><template #tags><van-tag plain type="danger">标签</van-tag><van-tag plain type="danger">标签</van-tag></template><template #footer><van-stepper@change="changecate"v-model="v2.num"theme="round"button-size="16"min="0"disable-input/></template></van-card></div></div></div></div>
</template>
<script>
import { goodsList } from "@/api/account.api";
import BScroll from "@better-scroll/core";
import { mapState, mapMutations } from "vuex";
export default {data() {return {activeKey: 0,bs: {},bsr: {}};},// 点击左边跳转到右边的节点methods: {onChange(i) {this.bsr.scrollToElement("#list" + i, 300);},// 4.当我们点击加号就触发函数然后在vuex对这个数据进行处理changecate() {this.$store.commit("changecate");}},async created() {// 页面初始化的时候把他提交给仓库,提交仓库要用commit去提交仓库里面去定义一个数组console.log(this.rightlist);const res = await goodsList();res.data.data.forEach(v => {v.foods.forEach(v2 => {v2.num = 0;});});// 1.vuex点击加减触发函数提交仓库把我们请求的数据存到仓库this.$store.commit("addlist", res.data.data);// 获取两个左右边的父节点this.$nextTick(() => {this.bs = new BScroll(".leftbox", {probeType: 3,click: true});this.bsr = new BScroll(".rightbox", {probeType: 3,click: true});// 拿到我们初始值的右边所有商品列表把他放到一个数组里面let arr = [];this.rightlist.forEach((v, i) => {arr.push(document.querySelector("#list" + i).offsetTop -document.querySelector("#list0").offsetTop);});// 给右边添加滚动事件this.bsr.on("scroll", v => {let y = Math.abs(v.y);for (let i = 0; i < arr.length; i++) {if (y >= arr[i] && y < arr[i + 1]) {this.activeKey = i;this.bs.scrollToElement("#cate" + i, 300);break;}}});});},// 3。在我们需要的页面拿出数据,然后循环就可以computed: {...mapState(["rightlist"]),asidelist() {return this.rightlist;}}
};
</script>
<style lang="scss" scoped>
h3 {color: black;font-size: 14px;height: 4vh;line-height: 4vh;width: 100%;background-color: rgb(218, 209, 209);text-indent: 1em;
}
.box {display: flex;flex-direction: row;.leftbox {// width: 100px;overflow-y: hidden;background-color: f7f8fa;margin-bottom: 50px;}.rightbox {height: 100vh;flex: 1;margin-bottom: 100px;overflow-y: hidden;// background-color: antiquewhite;}
}
</style>...............................................
下面是vuex的代码
import Vue from "vue";
import Vuex from "vuex";Vue.use(Vuex);export default new Vuex.Store({namespaced: true,state: {asidelist: [],rightlist: [],},mutations: {// 2.在仓库定义这个函数和对象  把我们存进去的数据存起来addlist(state, payload) {state.rightlist = payload;},// 5.对我们点进来的数据进行一个对右边的循环我们只要判断他是否》0,如果是大于0就push到新的数组changecate(state, payload) {let arr = [];state.rightlist.forEach((v) => {v.foods.forEach((v2) => {console.log(v2.num);if (v2.num > 0) {arr.push(v2);console.log(v2);}});});state.asidelist = arr;},},getters: {},actions: {},modules: {},
});
。。。。。。。。。。。。。。。。。。。。。。。。。。。这个是我们下面 那个 购物车的代码
<template><div class="cart"><!-- 购物车显示条 --><div class="cartbar"><div class="concat"><van-icon name="smile-o" />联系商家</div><div class="cartico"><van-badge v-if="asidelist.length>0" :content="asidelist.length"><van-icon name="shopping-cart" @click="show = !show" /></van-badge><van-icon v-else name="shopping-cart" class="cartico-off" /><div class="price"><strong>{{tatol}}</strong><span>{{asidelist.num}}</span></div></div><div v-if="asidelist.length>0" class="delivery delivery-on">去结算</div><div v-else class="delivery">20元起送</div></div><!-- 购物车列表 --><van-popup v-model="show" round position="bottom" :style="{ height: '30%' }"><h1>新用户下单立减39</h1><div class="clear"><span>购物车</span><span><van-icon name="delete-o" />清空购物车</span></div><ul><li class="box" v-for="(v,i) in asidelist" :key="i"><span class="titeles">{{v.goodsDesc}}</span><span>{{v.price*v.num}}</span><van-stepper v-model="v.num" min="0" /></li></ul></van-popup></div>
</template>
<script>
import { mapState } from "vuex";
import { reactive } from "vue";
export default {data() {return {show: false,value: 0};},created() {},computed: {...mapState(["asidelist"]),tatol() {let sum = 0;this.asidelist.forEach(v => {sum += v.price * v.num;});return sum;}}
};
</script><style lang="scss" scoped>
.box {display: flex;justify-content: space-between;.titeles {display: block;overflow: hidden; //隐藏文字text-overflow: ellipsis; //显示 ...white-space: nowrap; //不换行width: 150px;}
}
.clear {display: flex;justify-content: space-between;
}
h1 {height: 30px;line-height: 30px;text-align: center;width: 100%;background-color: #ffcc30;
}
.cart {position: fixed;left: 0;bottom: 0;
}.cartbar {z-index: 9999;position: fixed;// left: 2%;bottom: 10px;width: 88%;height: 70px;display: flex;color: #999;.concat {background: #222;width: 65px;font-size: 12px;text-align: center;padding-top: 10px;border-radius: 35px 0 0 35px;margin-right: 3px;.van-icon {font-size: 30px;display: block;}}.cartico {width: 1px;flex-grow: 1;background: #222;display: flex;.van-badge__wrapper {width: 50px;height: 50px;background: #ff0;font-size: 36px;line-height: 50px;text-align: center;border-radius: 30px;margin: 10px 7px;:deep(.van-badge--fixed) {top: 7px;right: 5px;}.van-icon {color: #000;}}.cartico-off {width: 56px;height: 56px;background: #333;font-size: 40px;line-height: 56px;text-align: center;border-radius: 30px;margin: 7px;}.price {width: 1px;flex-grow: 1;font-size: 12px;padding-top: 14px;strong {display: block;color: #fff;font-size: 20px;}}}.delivery {width: 70px;background: #222;font-size: 12px;line-height: 70px;border-radius: 0 35px 35px 0;text-align: center;}.delivery-on {background: #ff0;font-size: 14px;color: #000;}
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/20255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SLAM】LoFTR知多少

1. LoFTR: Detector-Free Local Feature Matching with Transformers PAPER 论文 | LoFTR: Detector-Free Local Feature Matching with Transformers 代码 | CODE: 关键词 | detector-free, local feature matching LoFTR知多少 1. LoFTR: Detector-Free Local Feature M…

O3DE的Pass

Pass介绍 Pass是具有输入和输出的渲染过程。 在最终渲染帧中看到的每个细节都是通过一系列Pass&#xff08;前一个Pass的输出是下一个Pass的输入&#xff09;计算出来的。Pass可以生成图像&#xff08;作为纹理、缓冲区或渲染目标&#xff09;。每个图像都包含关于场景的特定…

不藏了!极狐GitLab 向你介绍一位研发效能「六边形战士」

怎么用数字说清研发效能&#xff1f; 总是觉得研发资源不够用&#xff1f; 高效工作全靠领导盯&#xff1f; 不问不知道项目推迟发布&#xff1f; 代码泄漏了才紧急采取措施&#xff1f; 是时候甩开这些“研发人的 PTSD”了&#x1f623; 极狐星&#xff0c;给专业的你更…

Unity Shader:常用的C#与shader交互的方法

俗话说久病成医&#xff0c;虽然不是专业技术美术&#xff0c;但代码写久了自然会积累一些常用的shader交互方法。零零散散的&#xff0c;总结如下&#xff1a; 1&#xff0c;改变UGUI的材质球属性 有时候我们需要改变ui的一些属性&#xff0c;从而实现想要的效果。通常UGUI上…

Spring如何通过三级缓存解决循环依赖问题?

目录 一、什么是Spring 二、循环依赖问题 三、三级缓存机制 四、如何通过三级缓存解决循环依赖问题 一、什么是Spring Spring框架是一个开源的Java应用程序开发框架&#xff0c;提供了一种全面的、一致的编程模型&#xff0c;用于构建企业级应用程序和服务。它由Rod Johnso…

多个List 合并变成一个List+一个List 根据某个字段相等的另一个字段相加,并排序变成新的List

List<CurveTimeAndValueDomain> curves new ArrayList<>();for (int i 0; i < columnNames.size(); i){if (columnNames.get(i).equals(PlantConstant.TENDOWNFX) || columnNames.get(i).equals(PlantConstant.TENDOWNQP)) {//10千伏以下 数据 进行缓慢处理cu…

代码随想录算法训练营第五十三天 | 1143.最长公共子序列、1035.不相交的线、53.最大子数组和

文章目录 一、1143.最长公共子序列二、1035.不相交的线三、最大子数组和 一、1143.最长公共子序列 题目链接 代码如下&#xff1a; class Solution { public:int longestCommonSubsequence(string text1, string text2) {vector<vector<int>> dp (text1.size() …

Stable Diffusion中人物生成相关的negative prompts

下面是常用的negative prompt&#xff0c;在使用stable Diffusion webui等工具生成时可以填入。 bad anatomy, bad proportions, blurry, cloned face, deformed, disfigured, duplicate, extra arms, extra fingers, extra limbs, extra legs, fused fingers, gross proporti…

深度学习(32)——CycleGAN(1)

深度学习&#xff08;32&#xff09;——CycleGAN&#xff08;1&#xff09; 文章目录 深度学习&#xff08;32&#xff09;——CycleGAN&#xff08;1&#xff09;1. GAN原理2. CycleGAN&#xff08;1&#xff09;原理&#xff08;2&#xff09;核心思想&#xff08;3&#xf…

git回退到指定版本

#首先使用该方法查看版本号&#xff0c;后面可以接-n,n为数量&#xff0c;指定展示前几个版本记录。 git log &#xff08;或 git reflog&#xff09;#xxx换成你想回退的版本号。 git reset --hard xxx#强制推送到远程仓库&#xff0c;让远程仓库版本号一致。 git push origin…

PtahDAO:全球首个DAO治理资产信托计划的金融平台

金融科技是当今世界最具创新力和影响力的领域之一&#xff0c;区块链技术作为金融科技的核心驱动力&#xff0c;正在颠覆传统的金融模式&#xff0c;为全球用户提供更加普惠、便捷、安全的金融服务。在这个变革的浪潮中&#xff0c;PtahDAO&#xff08;普塔道&#xff09;作为全…

优漫动游|前端程序员容易出错的基础知识

web全栈是目前比较流行的语言&#xff0c;因为前端较其他语言相比&#xff0c;简单好学&#xff0c;而且现在的互联网公司几乎缺不了web前端开发&#xff0c;行业的需求致使大量的人转型前端&#xff0c;对于刚学前端的同学来讲&#xff0c;他们缺乏开发经验&#xff0c;在项目…

【C++】类与对象(2)

文章目录 前言一、类的6个默认成员函数二、构造函数1.概念2.特性3.初始化列表 三、析构函数1.概念2.特性 四、拷贝构造函数1.概念2.特性 五、赋值运算符重载1.运算符重载2.赋值运算符重载3.前置和后置重载 六、取地址及const取地址操作符重载总结 前言 在前面&#xff0c;给大…

【题解】单链表的排序

单链表的排序 题目链接&#xff1a;单链表的排序 解题思路1&#xff1a;分治、双指针 分治就是分而治之的意思&#xff0c;分的意思是说将一个大且复杂的问题划分成多个性质相似但是规模更小的问题&#xff0c;子问题继续按照同样的思路进行划分&#xff0c;直到问题被划分为…

【C++】开源:matplotlib-cpp静态图表库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍matplotlib-cpp图表库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…

DC.js教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 DC.js 是一个优秀的 JavaScript 库&#xff0c;用于在浏览器、移动设备中进行数据分析&#xff0c;最终有助于创建数据可视化&#xff1b;DC.js 是一个用于探索大型多维数据集的图表库&#xff0c;它依靠 D3.js 引擎以 CSS 友好的 SVG 格式呈现图表。它允许呈现复杂的…

ES6 - 数组新增的一些常用方法

文章目录 1&#xff0c;Array.from()2&#xff0c;Array.of()3&#xff0c;find()&#xff0c;findIndex()&#xff0c;findLast()和findLastIndex()4&#xff0c;Array.fill()5&#xff0c;keys()&#xff0c;values() 和 entries()6&#xff0c;Array.includes()7&#xff0c…

flask-----请求和响应,session

1 所有web:请求对象&#xff0c;响应对象(go,java,ptyhon) django&#xff1a;request&#xff08;每个请求一个request&#xff09;&#xff0c;新手四件套 flask&#xff1a;requset&#xff1a;全局的&#xff0c;但是也是每个请求一个request&#xff0c;新手三件套 2 fl…

【uniapp 报错 Cannot read properties of null (reading ‘offsetWidth‘)解决办法】

该错误通常是由于访问了一个空值的offsetWidth而引起的。解决方法如下&#xff1a; 检查代码中是否有访问了空值的情况&#xff0c;比如变量未初始化或者传入了空值参数或者事件未定义。 在操作元素之前&#xff0c;确保元素已经被正确加载。可以使用如下方法&#xff1a; <…

解决vue-print-nb-jeecg打印el-table表格预览竖版显示不全的问题!

第一步: 下载 vue-print-nb-jeecg 插件 npm install vue-print-nb-jeecg –save第二步: 在main.js中,引用并注册全局使用 import Print from vue-print-nb-jeecg Vue.use(Print);第三步: 需要打印的元素添加 id <div id"printMe">xxxx内容</div>第四步…