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操作文本框readOnly
May 15 Javascript
JavaScript下申明对象的几种方法小结
Oct 02 Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
Oct 13 Javascript
JS实现图片无间断滚动代码汇总
Jul 30 Javascript
用js通过url传参把数据从一个页面传到另一个页面
Sep 01 Javascript
JavaScript原生节点操作小结
Jan 17 Javascript
Vue实现动态显示textarea剩余字数
May 22 Javascript
浅谈通过JS拦截 pushState和replaceState事件
Jul 21 Javascript
用最少的JS代码写出贪吃蛇游戏
Jan 12 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
Apr 15 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
Aug 04 Javascript
测量JavaScript函数的性能各种方式对比
Apr 27 Javascript
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
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
2016/11/22 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
jQuery 解析xml文件
2009/08/09 Javascript
自己的js工具 Event封装
2009/08/21 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
实例详解AngularJS实现无限级联动菜单
2016/01/15 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
详解webpack进阶之loader篇
2017/08/23 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
Angularjs按需查询实例代码
2017/10/30 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
解决vue项目使用font-awesome,build后路径的问题
2018/09/01 Javascript
详解js模板引擎art template数组渲染的方法
2018/10/09 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
2020/11/05 Javascript
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Python 字典与字符串的互转实例
2017/01/13 Python
TensorFlow平台下Python实现神经网络
2018/03/10 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
Django csrf 两种方法设置form的实例
2019/02/03 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
英国女士家居服网站:hush
2017/08/09 全球购物
税务专业毕业生自荐信
2013/11/10 职场文书
小学数学教学反思
2014/02/02 职场文书
雷锋精神演讲稿
2014/05/13 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
2015秋季开学典礼主持词
2015/07/16 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android