Vue简易购物车实例

vue是前端轻量级MVVM框架,门槛相对较低,今天就用Vue做一个简易版本的购物车实例,我写的是vue2的形式,发表该文章以便记录

一.vue.js官网下载:安装 — Vue.js 

二.这里我使用的是直接引入的一个vue.js

 三.原理分析和实现

引入vue.js

<script src="js/vue.js"></script>

实例源码

HTML部分

 <div id="app">
         <form action="#" method="post">
             <table border="1" style="width: 450px;text-align: center">
                 <tr>
                     <td style="width: 8%">
                         <input type="checkbox" v-model="isChecked">
                     </td>
                     <td style="width: 30%">产品名称</td>
                     <td style="width: 20%">产品单价</td>
                     <td style="width: 20%">产品数量</td>
                     <td style="width: 30%">金额</td>
                 </tr>
                 <tr v-for="(item,index) in lists " :key="index">
                     <td>
                         <input type="checkbox" v-model="item.isCheck">
                     </td>
                     <td>{{item.name}}</td>
                     <td >{{item.price}}</td>
                     <td>
                         <input type="number" min="0"  v-model="item.num" style="width: 40px">
                     </td>
                 <td style="color: red;font-weight: bold">
                     ¥{{(item.price*item.num).toFixed(2)}}
                 </td>
                 </tr>
                 <tr>
                     <td colspan="5" style="text-align: left;color: red;font-weight: bold ;text-align: center" >
                         总价:    ¥{{getTotal }}
                     </td>
                 </tr>

             </table>
         </form>
     </div>

准备下列数据

lists:[
                         {
                             isCheck:false,
                             name:"钢笔",
                             price:2.52,
                             num:2
                         },
                         {
                             isCheck:false,
                             name:"毛笔",
                             price:3.5,
                             num:0
                         },
                         {
                             isCheck:false,
                             name:"雨伞",
                             price:15.6,
                             num:1
                         },
                         {
                             isCheck:false,
                             name:"辣条",
                             price:0.5,
                             num:0
                         },
                         {
                             isCheck:false,
                             name:"宋轶的签名照",
                             price:200,
                             num:2
                         }
                      ]

完整实例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>偷故事的鸭</title>
  <script src="js/vue.js"></script>
</head>
<body>

     <div id="app">
         <form action="#" method="post">
             <table border="1" style="width: 450px;text-align: center">
                 <tr>
                     <td style="width: 8%">
                         <input type="checkbox" v-model="isChecked">
                     </td>
                     <td style="width: 30%">产品名称</td>
                     <td style="width: 20%">产品单价</td>
                     <td style="width: 20%">产品数量</td>
                     <td style="width: 30%">金额</td>
                 </tr>
                 <tr v-for="(item,index) in lists " :key="index">
                     <td>
                         <input type="checkbox" v-model="item.isCheck">
                     </td>
                     <td>{{item.name}}</td>
                     <td >{{item.price}}</td>
                     <td>
                         <input type="number" min="0"  v-model="item.num" style="width: 40px">
                     </td>
                 <td style="color: red;font-weight: bold">
                     ¥{{(item.price*item.num).toFixed(2)}}
                 </td>
                 </tr>
                 <tr>
                     <td colspan="5" style="text-align: left;color: red;font-weight: bold ;text-align: center" >
                         总价:    ¥{{getTotal }}
                     </td>
                 </tr>

             </table>
         </form>
     </div>

     <script>
         const  vm=new  Vue({
             el:"#app",
             data(){
                 return{
                     lists:[
                         {
                             isCheck:false,
                             name:"钢笔",
                             price:2.52,
                             num:2
                         },
                         {
                             isCheck:false,
                             name:"毛笔",
                             price:3.5,
                             num:0
                         },
                         {
                             isCheck:false,
                             name:"雨伞",
                             price:15.6,
                             num:1
                         },
                         {
                             isCheck:false,
                             name:"辣条",
                             price:0.5,
                             num:0
                         },
                         {
                             isCheck:false,
                             name:"宋轶的签名照",
                             price:200,
                             num:2
                         }
                      ]
                 }
             },
             computed:{
                 //计算总价格
                 getTotal(){
                    // 获取lists中isCheck为true的数据
                     let _listsCheck=this.lists.filter(function (val){
                         return val.isCheck===true;
                     })
                     //总价
                     let totalPrice=0

                     for (let i = 0; i < _listsCheck.length; i++) {  //循环获取lists中isCheck为true的数据
                         totalPrice+=_listsCheck[i].num*_listsCheck[i].price//将对应isCheck为true的数量与价格相乘得出总价
                     }
                     return totalPrice.toFixed(2);  //总价保留2为小数
                 },
                 isChecked:{
                     get(){
                         let flag=true;
                         //读取的时候触发
                         this.lists.forEach(el=>{  //迭代lists中为isCheck
                             if(el.isCheck==false){  //当子选项有一个为false时,则全选设置为false
                                 flag=false;
                             }
                         })
                         return flag;
                     },
                     set(val) //当isChecked被赋值的时候会触发这个set方法
                     {
                         if(val) //判断如果全选被选中,则其他的子选项全部选中,如果全选被取消,则其他的所有子选项取消选中
                         {
                             this.lists.map(el=>el.isCheck=true);
                         }else
                         {
                             this.lists.map(el=>el.isCheck=false);
                         }
                     }
                 }
             }
         })
     </script>
</body>
</html>

效果图:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偷故事的鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值