Vue----购物车Cart
来源:互联网 发布:注册英语培训学校 知乎 编辑:程序博客网 时间:2024/06/11 19:32
功能:实现单个单价的变化,同步更新总价
html
<div class="wrap wrap-cart" id="app"> <div class="area"> <div class="cart-title"><span>购物车</span></div> <div class="cart-table"> <div class="cart-head"> <ul> <li>商品信息</li> <li>单价</li> <li>数量</li> <li>小计</li> <li>编辑</li> </ul> </div> <ul class="cart-body"> <li v-for="(item, index) in productList"> <div class="cart-item"> <a href="javascript:;" class="check-btn" v-bind:class="{'checked':item.checked}" v-on:click="selectProduct(item)"> <svg class="icon icon-ok"><use xlink:href="#icon-ok"></use></svg> </a> <div class="goods-msg clearfix"> <img class="img" v-bind:src="item.productImage" alt=""> <div class="title"> <a href="detail.html" target="_blank" v-text="item.productName"></a> <p v-for="part in item.parts" v-text="part.partName"></p> </div> </div> </div> <div class="cart-item"> <span class="item-price">{{ item.productPrice | partFilter('') }}</span> </div> <div class="cart-item"> <div class="num-amount"> <span class="num-increase" @click="changeMoney(item, -1)">-</span> <input type="text" class="num-input" :value="item.productQuantity" disabled> <span class="num-decrease" @click="changeMoney(item, +1)">+</span> </div> </div> <div class="cart-item"> <span class="item-price-total">{{ item.productPrice * item.productQuantity | money('元') }}</span> </div> <div class="cart-item"> <a href="javascript:;" class="icon-btn" @click="delBtn(item)"> <svg class="icon icon-del"><use xlink:href="#icon-del"></use></svg> </a> </div> </li> </ul> </div> <div class="cart-foot"> <div class="f-l"> <a href="javascript:;" class="check-btn" :class="{'checked':checkAllFlag}" @click="allSelect(true)"> <svg class="icon icon-ok"><use xlink:href="#icon-ok"></use></svg> </a> <a href="javascript:;" @click="allSelect(true)" v-if="!checkAllFlag" >全选</a> <a @click="allSelect(false)" href="javascript:;" v-if="checkAllFlag">取消全选</a> </div> <div class="f-r"> 总金额:<span class="total-price">{{ totalMoney | partFilter('元') }}</span> <a href="goods-order.html" class=""><button class="btn gopay-btn radius">结账</button></a> </div> </div> </div> <!-- 遮罩层 --> <div class="md-overlay" v-if="delFlag"></div> <!-- 提示框 --> <div class="md-panel" :class="{'md-show':delFlag}"> <div class="md-inner"> <div class="panel-header"><div class="panel-close" @click="delFlag=false"></div></div> <div class="panel-body">你确认删除此订单信息吗?</div> <div class="panel-footer clearfix"> <button class="btn-confirm" @click="confirmDel">YES</button> <button class="btn-cancel" @click="delFlag=false">NO</button> </div> </div> </div></div>
js
<script src="./style/js/libs/vue/vue.min.js"></script><script src="./style/js/libs/vue/vue-resource.js"></script><script> new Vue({ el:'#app', data:{ productList :[], totalMoney : 0, checkAllFlag :false, delFlag :false, curProduct :'' }, filters:{ partFilter:function(value, type){ return '¥ ' + value.toFixed(2) + type; // 保留2位仅做测试用 } }, mounted:function(){ this.$nextTick(function(){ this.getCartList(); }) }, methods:{ // 提取数据 getCartList:function(){ var _this = this; // this.$http.get('./style/js/cart.json', {'id':12}).then(res=>{ // ES6 this.$http.get('./style/js/cart.json', {'id':12}).then( function(res) { _this.productList = res.data.result.list; // 效果是一样的// console.log(res.data); // console.log(res.body); }) }, // 选择商品 selectProduct:function(item){ if(typeof item.checked == 'undefined'){ // 注册一个变量¥set(obj, key, val), 也可以在数据库里增加字段处理 this.$set(item, 'checked', true); } else { item.checked = !item.checked; } // console.log(item.checked) // 全部选中则全部按钮点亮,相反 var checkAllFlags = true; this.productList.forEach( function(item, index){ checkAllFlags = checkAllFlags && item.checked; }); this.checkAllFlag = checkAllFlags; // 再计算金额 this.callTotalMoney(); }, // 点击执行全选 allSelect:function(flag){ this.checkAllFlag = flag; // this.productList.forEach((item, index)=>{ // ES6 var _this = this; this.productList.forEach( function(item, index){ if(typeof item.checked == 'undefined'){ // 一上来就点全选的情况,也要注册一个变量 _this.$set(item, 'checked', true); } else { item.checked = _this.checkAllFlag; } }); // 再计算金额 this.callTotalMoney(); }, // 计算金额 callTotalMoney:function(){ this.totalMoney = 0; // this.productList.forEach((item, index)=>{ // ES6 var _this = this; this.productList.forEach( function(item, index){ if(item.checked){ _this.totalMoney += item.productPrice * item.productQuantity; } }) }, // 点击加减商品数量计算金额 changeMoney:function(item, type){ if(type < 0){ item.productQuantity--; if(item.productQuantity < 1) item.productQuantity = 1; } else { item.productQuantity++; } // 再计算金额 this.callTotalMoney(); }, // 点击删除 delBtn:function(item){ this.delFlag = true; this.curProduct = item; }, // 点击确认删除按钮 confirmDel:function(){ this.delFlag = false; var index = this.productList.indexOf(this.curProduct); console.log(index); this.productList.splice(index, 1); // 再计算金额 this.callTotalMoney(); } }})// 全局过滤器Vue.filter("money", function(value, type){ return '¥ ' + value.toFixed(2) + type;})</script>
阅读全文
0 0
- Vue----购物车Cart
- 购物车cart
- 购物车shopping-cart问题
- vue 购物车
- VUE购物车
- vue--完成购物车demo
- vue简单购物车功能
- vue购物车总价计算
- magento Shopping Cart Price Rule 购物车促销规则
- Cart 关于购物车里面需要封装的方法
- Shop项目--7. 加入购物车。cart.jsp
- vue--购物车+计算价格+自定义过滤器
- vue实现购物车动画功能
- vue实例(京东购物车)
- Vue.js框架练习之购物车
- Vue购物车和地址选配
- Vue.JS实战:简单的购物车
- 购物车(Shopping cart) —— B2C网站核心产品设计 (二)
- 前端奇淫技巧(一)之前端遇到需要数据遍历的如何处理
- websocket 实现服务器日志实时反馈(linux 环境)
- 九度[1137]-浮点数加法
- Invalid artifact repository: Repository identifier missingpom.xml
- X的级数和
- Vue----购物车Cart
- 【C/C++开发】STL内嵌数据类型: value_type
- HTML学习笔记(一)——HTML简介
- javascript 对象的继承
- oracle MINUS INTERSECT UNION ALL
- 接口测试那些事
- js里几个写法,第一次写,记录一下
- 理解Cookie和Session机制
- 求两个数的公因数的两种方法java实现