• 参考资料:vue.js官网
  • 项目演示:

  • 项目源代码:
  • 核心代码及踩坑

删除:

  1. new Vue({
  2. el:'#app',
  3. data:{
  4. productlist:[],
  5. totalMoney:0,
  6. checkAllFrag:false,//默认没有全选
  7. deFlag:false,
  8. //当前的存起来
  9. curProduct:''
  10. },
  11. //必须加mounted函数,这是页面初加载,如果不写这个函数,network中将请求不到数据
  12. mounted:function(){
  13. this.cartView();
  14. },
  15.  
  16. //局部过滤器
  17. filters:{
  18.  
  19. formatMoney:function(value){
  20. return "$" + value.toFixed(2);
  21. }
  22. },
  23.  
  24. methods:{
  25.  
  26. cartView:function(){
  27.  
  28. var _this=this; //要保存这个this,
  29. this.$http.get('data/cartData.json',{'id':'123'}).then(function(res){
  30.  
  31. _this.productlist=res.data.result.list; //这里的this已经不是实例对象了
  32. });
  33.  
  34. },
  35.  
  36. changeMoney:function(product,way){
  37.  
  38. if(way>=1){
  39. product.productQuantity++;
  40. }else{
  41. product.productQuantity--;
  42. if(product.productQuantity<1){
  43. product.productQuantity=1;
  44. }
  45. }
  46. this.calcTotalPrice();
  47.  
  48. },
  49.  
  50. selectedProduct:function(item){
  51.  
  52. //每次选中的时候先判断当前这个item.checked属性是否存在
  53. if(typeof item.check=="undefined"){
  54. this.$set(item,'check',true);//如果不存在就先给他设置一个
  55. }else{
  56. item.check=!item.check;
  57. }
  58.  
  59. this.calcTotalPrice();
  60. },
  61.  
  62. //
  63. checkAll:function(flag){
  64.  
  65. this.checkAllFrag=flag; //将前面传来的标志记录下来,全选=true,不全选=false
  66. var _this=this;
  67.  
  68. _this.productlist.forEach(function(item,index){ //就把上面的单选按钮的check都设置为true
  69.  
  70. if(typeof item.check =="undefined"){
  71. _this.$set(item,'check',_this.checkAllFrag); //把单选按钮设置成和全选时=true,不全选时=false
  72. }else{
  73. item.check=_this.checkAllFrag;
  74. }
  75. });
  76.  
  77. this.calcTotalPrice();
  78. },
  79.  
  80. calcTotalPrice:function(){
  81.  
  82. var _this=this;
  83. _this.totalMoney=0;//每次计算都要清零处理
  84.  
  85. _this.productlist.forEach(function(item,index){
  86.  
  87. if(item.check){//如果被选中,就计算总金额,并且把每一项累加
  88. _this.totalMoney+=item.productPrice*item.productQuantity;
  89. }
  90.  
  91. });
  92. },
  93.  
  94. delProduct:function(){
  95. //
  96. // this.productlist.indexOf(this.curProduct);
  97.  
  98. this.productlist.splice(this.index,1);
  99. this.deFlag=false;
  100.  
  101. }
  102.  
  103. }
  104.  
  105. });
  106.  
  107. Vue.filter('money',function(value,type){
  108. return '$' + value.toFixed(2)+type;
  109. });

删除的实例.js

点击删除按钮要弹出那个确定框:

第一步:同样用v-bind绑定一个属性,当点击删除按钮时,deFlag=true,弹出确定框

  1. //这是显示那个确定框的
  2. <div class="md-modal modal-msg md-modal-transition" id="showModal" v-bind:class="{'md-show':deFlag}">
  3.  
  4. //这是删除按钮
  5. <a href="javascript:void 0" class="item-edit-btn" @click="deFlag=true">
  6.  
  7. //在实例data中,定义了deFlag=false,当点击按钮时,deFlag=true框显示

第二步:定义和调用删除函数

  1. //yes和no调用的是同一个函数,当传入的参数为1的时候删除,为0的时候不删除
  2.  
  3. <button class="btn btn--m" id="btnModalConfirm" @click="delProduct(1)">Yes</button>
  4. <button class="btn btn--m btn--red" id="btnModalCancel" @click="delProduct(0)">No</button>
  5. </div>
  1. delProduct:function(type){
  2.  
  3. this.productlist.splice(this.index,type);
  4. this.deFlag=false;
  5.  
  6. }

踩坑:踩坑一:在vue1.0中可以用$delete函数来直接删除

采坑二:确定框的显示,用上面的方式

地址选配

地址过滤方式渲染数据,让购物车地址默认只显示三条

  1. new Vue({
  2.  
  3. el:'.container',
  4. data:{
  5. addresslist:[],
  6. limitNum:3
  7.  
  8. },
  9. filters:function(){
  10.  
  11. },
  12. mounted:function(){
  13. this.$nextTick(function(){
  14. this.getaddresslist();
  15. });
  16. },
  17. computed:{
  18. filterAddress: function(){
  19. return this.addresslist.slice(0,3);
  20. }
  21. },
  22.  
  23. methods:{
  24. getaddresslist:function(){
  25. var _this=this
  26. this.$http.get('data/address.json',{'id':123}).then(function(res){
  27.  
  28. _this.addresslist=res.data.result;
  29.  
  30. });
  31. }
  32.  
  33. }
  34. });

默认只显示三条.js

也是用v-for渲染数据,但是与之前的有区别

  1. //filterAddress 是有computed重新过滤的数组
  2. <li v-for="(item,index) of filterAddress" >
  3. <dl>
  4. <dt>{{item.userName}}</dt>
  5. <dd class="address">{{item.streetName}}</dd>
  6. <dd class="tel">{{item.tel}}</dd>
  7. </dl>
  8. </li>

computed函数过滤

  1. computed:{
  2. filterAddress: function(){
  3. //只返回数组从0-3的数据
  4. return this.addresslist.slice(0,3);
  5. }
  6. },

展示更多:直接在默认显示三条的基础上将limitNum,通过loadmore函数改变

  1. <div class="shipping-addr-more">
  2. <a class="addr-more-btn up-down-btn" href="javascript:" @click="loadmore()">
  3. more
  4. <i class="i-up-down">
  5. <i class="i-up-down-l"></i>
  6. <i class="i-up-down-r"></i>
  7. </i>

loadmore函数:

  1. loadmore:function(){
  2. return this.limitNum=this.addresslist.length;
  3. }

设为默认地址:“设为默认地址”和“默认地址”之间是一对互斥事件,isDefault是存在数据中的数据项,

  1. item.isDefault=false,就显示
  1. <div class="addr-opration addr-set-default" v-if="item.isDefault">
  2. <a href="javascript:;" class="addr-set-default-btn" @click="SetDefault(item.addressId)"><i>设为默认</i></a>
  3. </div>
  4. <div class="addr-opration addr-default" v-if="!item.isDefault">默认地址</div>

通过点击SetDefault()函数来实现

  1. SetDefault:function(addressId){
  2.  
  3. //遍历
  4. this.addresslist.forEach(function(obj,index){
  5.  
  6. //当前遍历的id是否等于我们点击的id,如果相等,就设为默认
  7. if(obj.addressId==addressId){
  8. obj.isDefault=true;
  9. }else{
  10. obj.isDefault=false;
  11. }
  12. });
  13.  
  14. }

配送方式的选择,也是两个互斥事件

  1. <li v-bind:class="{'check':shippingmethod==1}" @click="shippingmethod=1">
  2. <div class="name" >标准配送</div>
  3. <div class="price">Free</div>
  4. </li>
  5. <li v-bind:class="{'check':shippingmethod==2}" @click="shippingmethod=2">
  6. <div class="name" >高级配送</div>
  7. <div class="price">180</div>
  8. </li>

vue购物车和地址选配(三)的更多相关文章

  1. 关于慕课网《使用vue2.0实现购物车和地址选配功能》的总结

    视频学习网址:http://www.imooc.com/learn/796 源码打包:https://codeload.github.com/fachaoshao/Vue-ShoppingCart/z ...

  2. vue实现购物车和地址选配

    参考文献        vue.js官网 项目演示:数据渲染,格式化数据,点击加,减号自动加减 项目准备 1. 项目css和js文件  https://github.com/4561231/hello ...

  3. vue实现购物车和地址选配(二)

    参考文献: vue官网: vue.js 效果展示:全选和取消全选,计算总金额 项目源代码:https://github.com/4561231/hello_world 项目核心代码实现及踩坑 1.全选 ...

  4. VUE2.0实现购物车和地址选配功能学习第六节

    第六节 地址列表过滤和展开所有的地址 html:<li v-for="(item,index) in filterAddress">js: new Vue({ el:' ...

  5. VUE2.0实现购物车和地址选配功能学习第二节

    第二节 创建VUE实例 购物车项目计划: 1.创建一个vue实例 2.通过v-for指令渲染产品数据 3.使用filter对金额和图片进行格式化 4.使用v-on实现产品金额动态计算 5.综合演示 ① ...

  6. VUE2.0实现购物车和地址选配功能学习第七节

    第七节 卡片选中,设置默认 1.卡片选中html:<li v-for="(item,index) in filterAddress" v-bind:class="{ ...

  7. VUE2.0实现购物车和地址选配功能学习第五节

    第五节 单件商品金额计算和单选全选功能 1.vue精髓在于操作data模型来改变dom,渲染页面,而不是直接去改变dom 2.加减改变总金额功能: html:<div class="c ...

  8. VUE2.0实现购物车和地址选配功能学习第四节

    第四节 v-on实现金额动态计算 用¥金额 进行格式处理,可以使用原生js进行转换,但是在vuei,使用filter过滤器更加方便 注: 1.es6语法=>和import等 好处在于res参数后 ...

  9. VUE2.0实现购物车和地址选配功能学习第三节

    第三节 使用v-for渲染商品列表 1.使用vue-resource插件引入json数据 (注:在谷歌中调试打断点-- ,console还可以输出vm,res等属性列表,或者productList等一 ...

随机推荐

  1. MySQL 索引长度和区分度

    首先  索引长度和区分度是相互矛盾的, 索引长度太短,那么区分度就很低,吧索引长度加长,区分度就高,但是索引也是要占内存的,所以我们需要找到一个平衡点: 那么这个平衡点怎么来定? 比如用户表有个字段 ...

  2. hibernate多对多映射文件的配置

    user.hbm.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate ...

  3. Qt 使用openGL 渲染NV12格式的视频

    直接上代码 Nv12Render.h #ifndef NV12RENDER_H #define NV12RENDER_H #include <QOpenGLFunctions> #incl ...

  4. kubernetes 构架

  5. BZOJ3144[Hnoi2013]切糕——最小割

    题目描述 输入 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x,y,z) (1≤x≤ ...

  6. Vue——服务器上部署vue.js

    服务器版本 [root@izuf63g0jydq42k49eo7zcz ~]# uname -a Linux izuf63g0jydq42k49eo7zcz -.el7.x86_64 # SMP Tu ...

  7. CSAPC2008 skyline

    一座山的山稜线由许多片段的45度斜坡构成,每一个片段不是上坡就是下坡. *    *   *  /\*  /\  /\/   \/\/  \/        \ 在我们眼前的所见的任何宽度为n个单位的 ...

  8. 【XSY1162】鬼计之夜 最短路

    题目描述 给你一个\(n\)个点\(m\)条边的有向图,有\(k\)个关键点.求一条最短的从一个关键点到另一个关键点的路径. \(n,m,k\leq 100000\) 题解 跑\(k^2\)次最短路显 ...

  9. Gulp 新手使用

    Gulp 注意:gulp依赖于nodejs,在安装前要确保已经安装node环境,如为安装查看<windows系统下nodejs安装及环境配置>安装node环境. 1.全局安装 在命令行执行 ...

  10. 微信小程序原生开发简介

    简介: 总结: 1. 逻辑层使用js引擎,视图层使用webview渲染 2. 微信小程序已经支持了绝大部分的 ES6 API 3. 可以自动补全css的兼容语法 文档:https://develope ...