位置: IT常识 - 正文

Vue实现简易购物车功能(vue实现简易购物车)

编辑:rootadmin
Vue实现简易购物车功能 用Vue写一个列表案例,页面布局什么的dom,不需要自己事先全部排好,而是通过li遍历,把数据遍历出来;先定义好div标签,li根据数组的长度datalist进行遍历,图片的链接要用“:”,属性绑定都需要加上“:” 

图片限制它一个长度的尺寸就可以了,整张图片就会按照这个比例自动的变大或者变小,不会变形

推荐整理分享Vue实现简易购物车功能(vue实现简易购物车),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue简易购物结算,vue购物app,vue简易购物车案例代码,vue购物app,vue简易购物车,vue简易购物结算,vue简易购物车,vue简易购物结算,内容如对您有帮助,希望把文章链接给更多的朋友!

代码:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="./lib/vue.global.js"></script> <style> li{ display: flex; /* width: 500px; */ justify-content: space-around; margin-top: 20px; } li img{ width: 100px; } </style></head><body> <div id="box"> <input type="checkbox" v-model="isAll" @change="handleAllCheck()">全选/全不选 <ul> <li v-for="(item,index) in datalist" :key="item.id"> <input type="checkbox" v-model="checkList" :value="item" @change="handleItemCkecked"> <img :src="item.pic"> <div> <div>商品:{{item.name}}</div> <div style="color: red;">价格:{{item.price}}</div> </div> <div> <button @click="item.number--" :disabled="item.number===1">-</button> <span>{{item.number}}</span> <button @click="item.number++" :disabled="item.number===item.limit">+</button> </div> <div> <button @click="handleDelete(index,item.id)">删除</button> </div> </li> </ul> <div>总金额:{{ computedSum }}</div> {{checkList}} </div> <script> var obj={ data(){ return { isAll:false, checkList:[],//勾选的购物车数据 datalist:[ { name:"商品1", price:10, number:1, id:1, limit:5,//限购 pic:"https://www.yuucn.com/wp-content/uploads/2023/04/1682073083-687857a0d8c1fc9.jpg" }, { name:"商品2", price:20, number:2, id:2, limit:10,//限购 pic:"https://www.yuucn.com/wp-content/uploads/2023/04/1682073083-687857a0d8c1fc9.jpg" }, { name:"商品3", price:30, number:3, id:3, limit:15,//限购 pic:"https://www.yuucn.com/wp-content/uploads/2023/04/1682073083-687857a0d8c1fc9.jpg" } ] } }, methods:{ handleDelete(index,id){ // console.log(index) //删除datalist-靠index this.datalist.splice(index,1) //删除checkList-靠id this.checkList = this.checkList.filter(item => item.id!=id) //同步一下状态 this.handleItemCkecked() }, handleAllCheck(){ if(this.isAll){ this.checkList=this.datalist//全选 }else{ this.checkList=[]//全不选 } }, handleItemCkecked(){ if(this.checkList.length===this.datalist.length){ // console.log("全选") this.isAll = true }else{ // console.log("全不选") this.isAll = false } } } computed:{ computedSum(){ //累加计算 checkList每一项的价格*数量 var total=0 this.checkList.forEach(item => { total+=item.price*item.number }); return total } } } Vue.createApp(obj).mount("#box") </script></body></html>

结果:

功能实现:

(1)勾选了哪一个,就显示这个数据信息,然后累加计算勾选的数据对象里的“价格*数量”:

Vue实现简易购物车功能(vue实现简易购物车)

注意点解释:

value一定要加,不然不知道勾选的是哪一个,加上就能获取到勾选数据的信息;在标签属性里面引入的变量,都是用“”双引号,引起来的,而且绑定属性,前面都是要加上“:”冒号的,动态绑定;计算总金额,要用函数,直接在{{}}大括号里放一个函数,然后在methods里面定义即可,但是这个函数必须有返回值:sum();forEach(回调函数(){}) :数组遍历方法函数里面可以用js的方法定义变量:

(2)商品数量的选购:直接把表达式放在点击事件后面,调整数量的选购

注意点解释:

引号里面可以放表达式,变量、变量表达式;就是点击事件前面加上“@”和基本属性前面加上“:”都是动态绑定属性,动态绑定属性,引号里面就是js的地盘,里面写的是js代码;限购条件,可以用“禁用”这个属性,禁用属性后面写的是js代码,判断条件;当你这个选购数量变了,上面的金额也会跟着变,因为选购数量变了,引发datalist里面的对象改变,(代码不会变,只是页面更新了),对象改变了,其他地方引用对象里的属性也会变,所以就会出现你动了选购数量,总金额也会相应进行动态更新;原因是:datalist数据过来了,Vue会全部给你进行深度拦截,确保每个属性都会被拦截,当某个值进行改变了,它就会进行页面的更新操作, 

(3)删除购物车的商品

通过index索引值来删除,从数组中删除数据; 

存在的问题:当你勾选了这个商品,加在了checkList,即使你删除了datalist里的商品,这里面的商品也是不会清除的。 外面用datalist的数据都是引用,不会影响datalist的值,当然改变datalist的值也不会影响那些引用它的数据,checkList里的商品信息就是引用的datalist的数据。当你已经勾选了一个商品,你删除了购物车里的这个商品,也就是删除了datalist里的值,但是在checkList中这个商品还在,你只是删除了原数据,引用的数据还在,相互不影响。解决办法:提供一个方法就是:可以检测一下,如果你删除了购物车里的商品,通过商品id进行查找,在checkList中能不能找到,如果找到了就删了,就通过这个商品id进行联系就可以。当然还有其他方法,这里只介绍这一种:那如何实现删除呢,我们可以使用filter过滤的方法,当按删除的时候,把商品的id也传过来,如果这个“checkList里的商品id===删除的商品id”就不过滤它,把其他的没被删除的商品过滤出来,然后再赋值给checkList数组,再进行页面的更新。

(4)全选全不选:

通过v-model获取当前是勾选还是不勾选的值;绑定一个事件,在事件中拿到这个v-model当前的状态,这个事件不能是click事件,因为当你点击了这个选框,这个勾选的值还有可能没有拿到,人家要加载缓存呀,所以即使你点击了,你也拿不到这个值,所以就存在时间差。不过我们可以用change事件,作用是:当input的value值改变,而且失去焦点的时候才能拿到这个值,所以可以用这个事件;全选的功能是通过,把整个原数组datalist赋值给checkList数组,实现全选,全不选的功能是通过,把checkList数组赋值为空,实现的;

(5)通过每一项的选择来控制全选全不选 

 checkList的总长度和datalist的总长度进行对比,不相等就不勾,相等就勾上;

给每一项input都绑上这个change事件,每次勾选每一项小的checkbox的时候,都会判断checkList和datalist的长度, 

(6)解决一个小问题:

我刚开始没有选择所有的商品,只选了几个,所以那个全选的按钮就不会被选中,但是当我删除了几个没有选择的商品,留下全部选中的商品,但是这个时候全选框还是false值,(原因是我们是把事件绑在了当每项input的value改变的时候才触发,而我们删除input是不涉及value的改变的,)这个时候我们就在删除的函数里重新调用一下这个方法就行了。

本文链接地址:https://www.jiuchutong.com/zhishi/298730.html 转载请保留说明!

上一篇:超详细的VSCode下载和安装教程以及解决VSCode下载速度特别慢的问题(vscode2010下载)

下一篇:注意力机制详解系列(二):通道注意力机制(注意力机制工作原理)

  • 微视任务中心在哪里(微视任务中心在哪里2022)

    微视任务中心在哪里(微视任务中心在哪里2022)

  • 微信怎么发布群公告(微信怎么发布群文件)

    微信怎么发布群公告(微信怎么发布群文件)

  • 点淘怎么领红包(点淘怎么抢到大红包)

    点淘怎么领红包(点淘怎么抢到大红包)

  • 芝麻信用在哪里看(芝麻信用在哪里更新)

    芝麻信用在哪里看(芝麻信用在哪里更新)

  • vivo x27密码忘了怎么解锁(vivox27密码忘了怎么解锁)

    vivo x27密码忘了怎么解锁(vivox27密码忘了怎么解锁)

  • 微信消费别人能查到吗(微信消费别人能收到吗)

    微信消费别人能查到吗(微信消费别人能收到吗)

  • wifi连接上却不能访问互联网(wifi连接上却不可用)

    wifi连接上却不能访问互联网(wifi连接上却不可用)

  • 蚂蚁森林给别人浇水会不会减少自己的能量(蚂蚁森林给别人浇水别人能看到吗)

    蚂蚁森林给别人浇水会不会减少自己的能量(蚂蚁森林给别人浇水别人能看到吗)

  • 微处理器的组成三部分(微处理器的组成不包括)

    微处理器的组成三部分(微处理器的组成不包括)

  • ipad外包装序列号在哪(ipad2020外包装序列号在哪)

    ipad外包装序列号在哪(ipad2020外包装序列号在哪)

  • 电脑开不了机是哪里的问题(电脑开不了机是电源坏了吗)

    电脑开不了机是哪里的问题(电脑开不了机是电源坏了吗)

  • 订单备注会打在快递单上吗(订单备注可以写自己想说的话吗)

    订单备注会打在快递单上吗(订单备注可以写自己想说的话吗)

  • cad平行线快捷键(cad2007平行线快捷键)

    cad平行线快捷键(cad2007平行线快捷键)

  • 苹果手机音质怎么调节(苹果手机音质怎么设置像立体声)

    苹果手机音质怎么调节(苹果手机音质怎么设置像立体声)

  • 微博来自个人主页是通过什么关注的(微博来自个人主页和微博搜索)

    微博来自个人主页是通过什么关注的(微博来自个人主页和微博搜索)

  • qq号为什么突然被冻结(qq号为什么突然不值钱了)

    qq号为什么突然被冻结(qq号为什么突然不值钱了)

  • 主板bios坏了会怎么样(主板bios损坏能开机吗)

    主板bios坏了会怎么样(主板bios损坏能开机吗)

  • iphone我的名片怎么改(iphone我的名片怎么设置)

    iphone我的名片怎么改(iphone我的名片怎么设置)

  • word中部右对齐怎么设置(word右对齐在哪里)

    word中部右对齐怎么设置(word右对齐在哪里)

  • 苹果手表电量能用多久(苹果手表电量能在手机上看吗)

    苹果手表电量能用多久(苹果手表电量能在手机上看吗)

  • 陌陌怎么退主播粉丝团(陌陌怎么退主播保证金)

    陌陌怎么退主播粉丝团(陌陌怎么退主播保证金)

  • 华为p20怎么看海拔高度(华为p20手机怎么看海拔高度)

    华为p20怎么看海拔高度(华为p20手机怎么看海拔高度)

  • r17可以视频美颜吗(r17可以视频美颜嘛)

    r17可以视频美颜吗(r17可以视频美颜嘛)

  • 苹果手机录音可以录多长时间(苹果手机录音可以锁屏吗)

    苹果手机录音可以录多长时间(苹果手机录音可以锁屏吗)

  • 无法打开网页 因为连接被重置(无法打开网页是什么意思)

    无法打开网页 因为连接被重置(无法打开网页是什么意思)

  • 屏幕镜像一直正在查找(屏幕镜像一直正在连接)

    屏幕镜像一直正在查找(屏幕镜像一直正在连接)

  • ps命令显示uid而不是用户名如何解决?(ps命令不可用)

    ps命令显示uid而不是用户名如何解决?(ps命令不可用)

  • AttributeError: cannot assign module before Module.__init__() call

    AttributeError: cannot assign module before Module.__init__() call

  • 个体户超过了核定征收额怎么交税
  • 增值税进项税额转出是什么意思
  • 清包工可以有一部分小料吗
  • 100万劳务费发票多少税
  • 飞机发票和行程单可以一起开吗
  • 企业的成本核算包括
  • 报销单冲抵借支做账
  • 预收账款缴纳企税怎么算
  • 劳务公司注销了,未出的款怎么走账
  • 作废发票进项税怎么处理
  • 合伙人退伙怎么处理
  • 小规模减免附加税会计分录怎么做
  • 跨年度错账更正方法
  • 净资产收益率怎么求
  • 工程和技术研究和试验发展
  • 增值税专用发票校验码是哪个位置
  • 递延收益在现金流量表体现吗
  • 企业所得税汇算清缴表
  • 产品 研发
  • win10怎么设置win7开始菜单
  • 购货方收到红字发票计入进项税转出还是进项税额负数?
  • 超额累进税率包括
  • Vue3+element-plus 后台管理系统(含登陆注册功能页面)
  • 现金折扣税务处理shi
  • 事业单位以固定薪资为准
  • 承兑汇票到期超过10天怎么办
  • vue ts
  • 税务稽查的进项税怎么处理
  • 黏菌算法总结
  • js读取本地excel
  • layui 安卓
  • iframe嵌套页面点击里面的按钮
  • 图像分类实战
  • 无形资产的转让
  • 天猫一般纳税人如何纳税
  • 应交增值税为负数怎么处理
  • 坏账准备的账务处理例题
  • 股东以房产投资公司
  • 解决问题对吗
  • MongoDB aggregate 运用篇个人总结
  • 前端架构优化
  • php环境配置教程
  • 现金股利和现金利润的区别
  • 下列项目的进项税额可以从销售税额中抵扣的是
  • 应付职工薪酬余额方向
  • 结转增值税有留抵税额吗
  • 简易征收的税款可以抵减
  • 管理费用多了怎么办
  • 并购 投资
  • 广告公司收到广告收入会计分录
  • 企业所得税汇算清缴时间
  • 增值税税款多缴纳还能退回吗
  • 服务业成本的会计核算
  • 应收账款是净额列示吗
  • 去大城市发展成功的例子
  • win7网页无法访问
  • mac系统播放器声音小
  • rhel6.5安装教程
  • windows xp windows
  • 苹果服务器操作系统
  • opengles 旋转 平移 缩放
  • jQuery的extend方法【三种】
  • web标准有哪些方面
  • vue基于什么
  • jquery select2的使用心得(推荐)
  • Do All in Cmd Shell一切在命令行下完成第1/6页
  • Errors running builder 'Android Resource Manager' on Project java.lang.NullPointerException
  • div与script
  • jquery瀑布流代码
  • js判断密码是否符合标准
  • jquery的ajax提交form表单的两种方法小结(推荐)
  • 广告业发票税率是多少 可以抵扣多少
  • 国家税务总局查发票
  • 江苏国家税务局电子税务局
  • 国税局升迁难么
  • 免税饲料发票怎么开具
  • 国家税务总局辽宁省税务局
  • 江苏省官网
  • 山东省地方税务局关于个人所得税
  • 怎么在国税网上交社保
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设