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新手入门指导教程
Nov 18 Vue.js
vue-router定义元信息meta操作
Dec 07 Vue.js
vue中利用three.js实现全景图的完整示例
Dec 07 Vue.js
vue中如何自定义右键菜单详解
Dec 08 Vue.js
vue中watch的用法汇总
Dec 28 Vue.js
vue实现按钮切换图片
Jan 20 Vue.js
vue使用echarts画组织结构图
Feb 06 Vue.js
vue项目实现分页效果
Mar 24 Vue.js
Vue通过懒加载提升页面响应速度
May 10 Vue.js
详解Vue的列表渲染
Nov 20 Vue.js
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 Vue.js
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 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
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
PHP mkdir()定义和用法
2009/01/14 PHP
php 调试利器debug_print_backtrace()
2012/07/23 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
2012/01/21 Javascript
一个JavaScript获取元素当前高度的实例
2014/10/29 Javascript
javascript模拟命名空间
2015/04/17 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
uni-app微信小程序登录授权的实现
2020/05/22 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
浅谈Python反射 &amp; 单例模式
2019/03/21 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
2019/06/21 Python
matplotlib制作雷达图报错ValueError的实现
2021/01/05 Python
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
2013/06/07 面试题
学生出入校管理制度
2014/01/16 职场文书
光盘行动倡议书
2014/02/02 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
运动会主持词大全
2015/07/02 职场文书