后端程序员学习前端篇(二)

vue实现简单购物车

首先上效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主要实现了删除,全选,全部取消
技术点 对计算属性和侦听器的掌握及@change和watch的区别
上代码:
html部分:
<div id="app">
    <div class="center">购物车</div>
    <div v-for="item in list" class="item" >
      <input type="checkbox" v-model="item.check" @change='gaibian(index)'>
      <div>{{item.name}}</div>
      <div>{{item.price}}</div>
      <div class="ctrl">
        <button @click='item.num++'>+</button>
        <input type="text" v-model="item.num">
        <button  @click='item.num--'>-</button>
      </div>
      <button @click='del(index)'>删除</button>
    </div>
    <div class="total">
      <input type="checkbox" v-model="selectall" @change='all()'>
      <div>总价 ¥:{{zongjia}}</div>
    </div>
  </div>
javascript部分:
<script src="https://cdn.bootcss.com/vue/2.6.11/vue.js"></script>
  <script type="text/javascript">

    var vm = new Vue({
      el: '#app',
      
      data: {
        hang:0,
        selectall:false,
        list:[{
          id:1,
          name:'iphone6',
          price:1000,
          num:1,
          check:false,
        },{
          id:2,
          name:'iphone7',
          price:2000,
          num:2,
          check:true,
        },{
          id:3,
          name:'iphoneX',
          price:4000,
          num:1,
          check:false,
        }]
      },
      computed: {//计算属性

        zongjia(){
          let sum=0;//总计
          for(let i=0; i<this.list.length;i++){
            if(this.list[i].check){//如果勾中
              sum+=parseFloat(this.list[i].price*this.list[i].num)
            }
            
          }
          return sum;
        }
      },
      
      methods: {
        del(index){
				// 删一个数组元素
        this.list.splice(index,1);
      },
    /*   selectall(){
        let bianliang=true;
          for(let i=0; i<this.list.length;i++){
            this.list[i].check=bianliang;           
         
        } */
        gaibian(index){
          let all=true;
          for(let i=0;i<this.list.length;i++){
            if(!this.list[i].check){
              all=false;
            }
              
          }
          this.selectall=all;
        },
        all(){
          for(let i=0;i<this.list.length;i++){
            this.list[i].check=this.selectall;
          }
        }
      },
      /* watch:{//侦听器  不能用侦听,只要改变就会改变其他
        selectall(newval){
          for(let i=0; i<this.list.length;i++){
            this.list[i].check=newval;           
         
        }
        }
         
      }
      , */
    });
  </script>
心得思路:

①v-for循环列表,v-model双向绑定
②computed:
一旦这个计算属性里面用到的data数据发生变化,就会重新执行这个计算属性函数得到一个新的值,计算属性必须有返回值。
加减数量变化都会改变总数
③全选/全部取消 为什么不用watch侦听?
因为只全选框的true和false都会影响其他的复选框的true和false,而本来全选如果其中一个复选框勾选取消,就会触发全部取消的侦听事件从而出现bug,都取消了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值