vue实现购物车结算功能


Posted in Javascript onJune 18, 2020

用vue做的购物车结算的功能,供大家参考,具体内容如下

vue实现购物车结算功能

代码:

<!-- 占位 -->
<template>
 <div>
 <div class="product_table">
 <div class="product_info">商品信息</div>
 <div class="product_info">商品金额</div>
 <div class="product_info">商品数量</div>
 <div class="product_info">总金额</div>
 <div class="product_info">编辑</div>
 </div>
 <div class="product_table" v-for="(item,index) in getProductList" :key="index">
 <div style="width:20px;height:20px;border-radius:10px;border:1px solid black;" @click="checkSingle(item)" :class="{checked:item.makeChoose}"></div>
 <div class="product_info">{{item.productName}}</div>
 <div class="product_info">{{item.productPrice}}</div>
 <span @click="changeNumber(item,1)">+</span>
 <input type="text" v-model="item.prductQty" style="width: 30px;">
 <span @click="changeNumber(item,-1)">-</span>
 <div class="product_info">{{item.productPrice*item.prductQty}}</div>
 <div class="product_info" @click="deleteProduct(index)">删除</div>
 </div>
 <div style="width:20px;height:20px;border-radius:10px;border:1px solid black;margin-top:10px" @click="checkAll()" :class="{checked:checkAllItem}"></div>
 <div>总价格:{{totalPrice}}</div>
 </div>
</template>
<script>
 import Vue from 'vue'
 export default {
 name: 'side-bar-placeholder',
 data () {
 return {
 getProductList:[
 {
 productName:'西瓜',
 productPrice:100,
 prductQty:3
 },
 {
 productName:'南瓜',
 productPrice:50,
 prductQty:2
 },
 {
 productName:'苹果',
 productPrice:300,
 prductQty:3
 },
 ],
 totalPrice:0, //总金额
 checkAllItem:false, //全部选中
 checkedList:[] //选中的数
 }
 },
 methods:{
 //删除某一项
 deleteProduct:function (index) {
 this.getProductList.splice(index,1) 
 this.calcTotalPrice() //这里要注意,当某一项删除时,如果你选中了,这里也是要做计算总价格的
 },
 //修改数量
 changeNumber:function (number,add) {
 if(add<0){
 number.prductQty--;
 if(number.prductQty<'1'){ //因为数量最低是1
 number.prductQty=1
 }
 }else{
 number.prductQty++;
 } 
 this.calcTotalPrice() 
 },
 //选中单个的
 checkSingle:function (item){
 if(typeof item.makeChoose=='undefined'){ //这里要注意,因为checked字段根本不在this.getProductList里面,所以你要自己赋值进去
 Vue.set(item, 'makeChoose',true) //这里应该设为true
 }else{
 item.makeChoose=!item.makeChoose
 } 
 this.calcTotalPrice() 
 },
 //选中所有的
 checkAll:function (){ 
 this.checkAllItem=!this.checkAllItem
 var _this=this
 if(this.checkAllItem){
 this.getProductList.forEach(element => {
 if(typeof element.makeChoose=='undefined'){
  Vue.set(element, 'makeChoose',_this.checkAllItem) //让每一小项跟随checkall来变化
 }else{
 element.makeChoose=_this.checkAllItem
 }
 });
 }else{
 this.getProductList.forEach(element => {
 if(typeof element.makeChoose=='undefined'){
  Vue.set(element, 'makeChoose',_this.checkAllItem)
 }else{
 element.makeChoose=_this.checkAllItem
 }
 });
 } 
 this.calcTotalPrice() 
 },
 //计算总金额
 calcTotalPrice:function () {
 var _this=this
 this.totalPrice=0
 this.getProductList.forEach((element,index) => {
 if(element.makeChoose){
 _this.totalPrice+=element.productPrice*element.prductQty //这里是一个累加的过程,所以要用+=
 }
 }); 
 },
 //让页面一进来就处于选中的状态
 makeAllChecked:function () {
 this.getProductList.forEach((item)=>{
 if(typeof item.makeChoose=='undefined'){
 Vue.set(item, 'makeChoose',true)
 }
 }) 
 }
 } ,
 watch:{
 //如果全部选中,那么全部选中的按钮应该变绿,如果一项不是,应该变空
 getProductList:{
 handler:function (item) {
 this.checkedList=this.getProductList.filter((element)=>{
 return element.makeChoose==true;
 }) 
 //选中数<总数据
 if(this.checkedList.length<this.getProductList.length){
 this.checkAllItem=false
 }else{
 this.checkAllItem=true
 } 
 },
 deep:true //这个deep:true一定要写,不然肯定不会时时变化的
 }
 } ,
 created:function (){
 this.makeAllChecked()
 }
 }
</script>
<style lang="less" scoped>
.product_table{
 display: flex;
 width: 100%;
}
.product_info{
 flex:1; 
}
.checked{
 background-color:green;
}
</style>

这个代码实现了什么?

1.在点击加减时每个产品的总价变化,所有产品的总价变化
2.选中时才会结算
3.如果全部选中了每个子项,全部选中按钮会变绿,如果有一项不选中,那么会变白
4.一般的购物车,我希望他一进来就是checked的状态,提高购买性
5.当我删除某一项时,如果这一项是已经checked了的,也要让他在计算总价时重新计算.

ps:最后一行的按钮是全部选中哦,或者是全部取消,忘记写了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript延时重复执行函数 lLoopRun.js
Jun 29 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
Mar 11 Javascript
Bootstrap每天必学之标签页(Tab)插件
Aug 09 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
May 09 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
May 17 Javascript
Easyui的组合框的取值与赋值
Oct 28 Javascript
MvcPager分页控件 适用于Bootstrap
Jun 03 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
Jun 29 Javascript
vue+element UI实现树形表格带复选框的示例代码
Apr 16 Javascript
vue 实现超长文本截取,悬浮框提示
Jul 29 Javascript
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
Apr 03 Javascript
解决vue-router的beforeRouteUpdate不能触发
Apr 14 Vue.js
vue-cli4.x创建企业级项目的方法步骤
Jun 18 #Javascript
javascript实现文字跑马灯效果
Jun 18 #Javascript
node.js +mongdb实现登录功能
Jun 18 #Javascript
VSCode launch.json配置详细教程
Jun 18 #Javascript
JavaScript中使用Spread运算符的八种方法总结
Jun 18 #Javascript
通过实例了解JS执行上下文运行原理
Jun 17 #Javascript
从0搭建vue-cli4脚手架
Jun 17 #Javascript
You might like
css把超出的部分显示为省略号的方法兼容火狐
2008/07/23 Javascript
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
2013/11/06 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
快速学习AngularJs HTTP响应拦截器
2015/12/31 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
[02:33]2018DOTA2亚洲邀请赛赛前采访——LGD
2018/04/04 DOTA
python写xml文件的操作实例
2014/10/05 Python
使用Python生成url短链接的方法
2015/05/04 Python
CentOS安装pillow报错的解决方法
2016/01/27 Python
pandas object格式转float64格式的方法
2018/04/10 Python
python使用Plotly绘图工具绘制散点图、线形图
2019/04/02 Python
python 使用socket传输图片视频等文件的实现方式
2019/08/07 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
python xlsxwriter模块的使用
2020/12/24 Python
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
幼教个人求职信范文
2013/12/02 职场文书
物流仓管员工作职责
2014/01/06 职场文书
论文评语大全
2014/04/29 职场文书
公司捐款倡议书
2014/05/14 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
产品委托授权书范本
2014/09/16 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
导游词之河北邯郸
2019/09/12 职场文书
vue中 this.$set的使用详解
2021/11/17 Vue.js
PyTorch中的torch.cat简单介绍
2022/03/17 Python