Vue组件简易模拟实现购物车


Posted in Vue.js onDecember 21, 2020

本文实例为大家分享了Vue组件模拟实现购物车的具体代码,供大家参考,具体内容如下

Vue组件简易模拟实现购物车

代码:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
 <script src="./lib/vue-2.4.0.js"></script>
 <style>
  #app{
   width:600px;
  }

  #myTable{
   width:500px;
   border-collapse:collapse;
  }

  td, th{
   text-align: center;
   font-size:20px;
   border:2px solid black;
  }

  td{
   height: 40px;
  }

  input{
   width: 30px;
   text-align: center   
  }

 </style>
</head>
<body>

 <div id="app">
  <my-cart></my-cart>
 </div>

 <script>
  var MyCommmodity = {
   props: ["list"],
   template:`
    <div>
     <button @click="baicai">白菜</button>
     <button @click="qingcai">青菜</button>
     <button @click="luobo">萝卜</button> 
    </div>
   `,
   methods: {
    baicai: function(){
     var cai = {};
     cai.id = 4;
     cai.name = "白菜"
     cai.price = 3;
     cai.num = 1;
     this.list.push(cai)
    },
    qingcai: function(){
     var cai = {};
     cai.id = 5;
     cai.name = "青菜"
     cai.price = 6;
     cai.num = 1;
     this.list.push(cai)
    },
    luobo: function(){
     var cai = {};
     cai.id = 6;
     cai.name = "萝卜"
     cai.price = 8;
     cai.num = 1;
     this.list.push(cai)
    }
   }
  }

  var MyTable = {
   props: ["list", "flag"],
   template:`
    <table id="myTable">
    <tr>
     <th>编号</th>
     <th>名称</th>
     <th>单价</th>
     <th>数量</th>
     <th>操作</th>
    </tr>
    <tr :key="item.id" v-for="item in list"> 
     <td>{{item.id}}</td>
     <td>{{item.name}}</td>
     <td>{{item.price}}</td>
     <td>
      <button :disabled="flag" @click="sub(item.id)">-</button>
      <input type="text" :value="item.num" @blur="changeNum(item.id,$event)">
      <button @click="add(item.id)">+</button>
     </td>
     <td>
      <button @click="del(item.id)">删除</button>
     </td>
    </tr>
   </table>
   `,
   methods: {
    changeNum: function(id, event){
     this.$emit("change-num",{
      id: id,
      type: "change",
      num: event.target.value
     });
    },
    sub: function(id){
     this.$emit("change-num",{
      id: id,
      type: "sub"
     })
    },
    add: function(id){
     this.$emit("change-num",{
      id: id,
      type: "add"
     })
    },    
    del: function(id){
     // alert(id);
     this.$emit("del-cart",id)
    }
   }
  }

  var MyPrice = {
   props: ["list"],
   template:`
    <div>
     <span>结算:</span>
     <span>{{total}}</span>     
    </div>
   `,
   computed: {
    total: function(){
     var t = 0;
     this.list.forEach(item => {
      t += item.price * item.num;
     });
     return t;
    }
   }
  }

  Vue.component('my-cart', {
   data () {
    return {
     flag:false,
     list:[{
      id: 1,
      name: "猪",
      price: "10",
      num:1,
     },
     {
      id: 2,
      name: "牛",
      price: "11",
      num:1,
     },
     {
      id: 3,
      name: "鸡",
      price: "13",
      num:1,
     }]
    }
   },
   template:`
    <div> 
     <my-commmodity :list="list"></my-commmodity> 
     <my-table :list="list" :flag="flag" @change-num="changeNum($event)" @del-cart="delCart($event)"></my-table>
     <my-price :list="list"></my-price>
        
    </div>
   `,
   components:{ 
    'my-table':MyTable,
    'my-price':MyPrice,
    'my-commmodity':MyCommmodity,
   },
   methods:{
    changeNum: function(val){
     if(val.type ==="change"){
      this.list.some(item=>{
       if(item.id == val.id){
        item.num = val.num;
        return true;
       }
      });      
     }else if(val.type ==="sub"){
      this.list.some(item=>{
       if(item.id == val.id && item.num >0){
        item.num -= 1;
        return true;
       }
      }); 
     }else if(val.type ==="add"){
      this.list.some(item=>{
       if(item.id == val.id){
        item.num += 1;
        return true;
       }
      }); 
     }

    },
    delCart: function(id){
     var index = this.list.findIndex(item=>{
      return item.id == id;
     })
     this.list.splice(index,1)
    }
   }
  })


 var vm = new Vue({
  el: '#app',
  data:{
  }
 })
 </script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
vue element-ul实现展开和收起功能的实例代码
Nov 25 Vue.js
详解Vue3 Teleport 的实践及原理
Dec 02 Vue.js
vue使用element-ui实现表单验证
Dec 13 Vue.js
vue中activated的用法
Jan 03 Vue.js
通过vue.extend实现消息提示弹框的方法记录
Jan 07 Vue.js
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 Vue.js
详解vue3中组件的非兼容变更
Mar 03 Vue.js
如何理解Vue简单状态管理之store模式
May 15 Vue.js
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 Vue.js
Vue.Draggable实现交换位置
Apr 07 Vue.js
VUE解决跨域问题Access to XMLHttpRequest at
May 06 Vue.js
vue el-table实现递归嵌套的示例代码
Aug 14 Vue.js
vue实现购物车的小练习
Dec 21 #Vue.js
Vue实现小购物车功能
Dec 21 #Vue.js
vue监听滚动事件的方法
Dec 21 #Vue.js
vue el-upload上传文件的示例代码
Dec 21 #Vue.js
vue 在单页面应用里使用二级套嵌路由
Dec 19 #Vue.js
vue中如何添加百度统计代码
Dec 19 #Vue.js
vue 导航守卫和axios拦截器有哪些区别
Dec 19 #Vue.js
You might like
PHP 常见郁闷问题答解
2006/11/25 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
PHP中SESSION的注销与清除
2015/04/16 PHP
php获取系统变量方法小结
2015/05/29 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
[01:03:22]LGD vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
详解Python中映射类型的内建函数和工厂函数
2015/08/19 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
python实现人脸识别经典算法(一) 特征脸法
2018/03/13 Python
Python多进程原理与用法分析
2018/08/21 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
Python如何获取Win7,Win10系统缩放大小
2020/01/10 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
Matplotlib配色之Colormap详解
2021/01/05 Python
父亲节活动策划方案
2014/08/24 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
人口与计划生育责任书
2015/05/09 职场文书
销售会议开幕词
2016/03/04 职场文书
通知怎么写?
2019/04/17 职场文书
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python
Elasticsearch 聚合查询和排序
2022/04/19 Python