Vue实现购物车实例代码两则


Posted in Javascript onMay 30, 2020

一、第一种比较简单

效果图

Vue实现购物车实例代码两则

实现代码:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>购物车案例</title>
 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<style>
 *{
 padding: 0;
 margin:0
 }
 ul li{
 width: 1200px;
 display: flex;
 align-items: center;
 justify-content: center;
 }
 li div,.total{
 display: inline-block;
 width:200px;
 height: 50px;
 line-height: 50px;
 text-align: center;
 }
 button{
 width: 60px;
 height: 40px;
 text-align: center;
 line-height: 40px;
 }

</style>
<body>

 <div id="app">
 <ul>
  <goodsitem 
  v-for="item in goodslist" 
  :item="item" 
  :key="item.id"
  @onchange="(type)=>{handleCount(type,item)}"
  @ondelete="()=>{handleDelete(item.id)}">
  </goodsitem>
  <div class="total" style="padding-left: 113px">总价:{{total}}</div>
 </ul>
 </div>

</body>
<script>
 var computed={
 props:{
  count:{
   type:Number,
   require:true
  }
 },
 methods:{
  handleCount(type){
  this.$emit('onchange',type)
  }
 },
 template:`<div style="width:200px">
   <button @click="handleCount('sub')">-</button>
   <span>{{count}}</span>
   <button @click="handleCount('add')" >+</button>
   </div>
 
 `
 
 }
 var goodsitem={
 props:{
  item:{
  type:Object,
  require:true
  }
 },
 methods:{
  handleCount(type){
  this.$emit('onchange',type)
  },
  handleDelete(){
  this.$emit('ondelete')
  }
 },
 components:{
  computed
 },
 template:`<li>
   <div>{{item.goodsName}}</div>
   <div>{{item.price}}</div>
   <computed :count="item.count" @onchange="handleCount"></computed>
   <div>{{item.sum}}</div>
   <div><button @click="handleDelete">删除</button></div>
   </li>
   `
 }

 var app=new Vue({
 el:"#app",
 data:{
  goodslist:[{
  id:1,
  goodsName:"小可爱",
  price:100,
  count:1,
  sum:100
  },{
  id:2,
  goodsName:"小可爱",
  price:200,
  count:2,
  sum:400
  },{
  id:3,
  goodsName:"小可爱",
  price:300,
  count:3,
  sum:900
  },{
  id:4,
  goodsName:"小可爱",
  price:400,
  count:1,
  sum:400
  },
  ]
 },
 methods:{
  handleCount(type,item){
  if(type=='add'){
   item.count+=1
  }else{
   if(item.count==1){
   this.handleDelete(item.id) 
   return
   }
   item.count-=1
  }
  item.sum=item.count*item.price
  },
  handleDelete(id){
  return this.goodslist=this.goodslist.filter((item)=>{
   return id!=item.id
  })
  }
 },
 computed:{
  total(){
  return this.goodslist.reduce((total,item)=>{
   return total+=item.sum
  },0)
  }
 },
 components:{
  goodsitem
 }
 })
</script>
</html>

二、一个用vue实现的简单响应式购物车案例

实现结果

Vue实现购物车实例代码两则

如上,所有书类数据存在数组里,遍历显示在表格中,点击+和-可以实现数量和总价格的响应式变化,其中,减号到1时便添加了disabled类型,无法点击。 价格显示时通过过滤器显示的,加上Z¥符号和两位小数。项目结构为三个文件。

index.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <link rel="stylesheet" href="style.css" rel="external nofollow" >
</head>
<body>
<div id="app">
 <div v-if="books.length">
 <table>
 <thead>
 <tr>
 <th></th>
 <th>书籍日期</th>
 <th>出版日期</th>
 <th>价格</th>
 <th>购买数量</th>
 <th>操作 </th>
 </tr>
 </thead>

 <tbody>
 <tr v-for="(item,index) in books">
 <!--<td v-for="value in item">{{value}}</td>-->
 <td>{{item.id}}</td>
 <td>{{item.name}}</td>
 <td>{{item.date}}</td>
 <!--<td>{{getFinalPrice(item.price)}}</td> 下面是过滤器语法-->
 <td>{{item.price | showPrice}}</td>
 <td>
 <button @click="increment(index)" v-bind:disabled="item.count<=1">-</button>
 {{item.count}}
 <button @click="decrement(index)">+</button>
 </td>
 <td>
 <button @click="removeHandler(index)">移除</button>
 </td>
 </tr>
 </tbody>
 </table>
 <h2>总价格: {{totalprice | showPrice}}</h2>
 </div>
 <h2 v-else> 购物车为空</h2>
</div>
<script src="../js/vue.js"></script>
<script src="main.js"></script>
<script></script>
</body>
</html>

main.js

const app = new Vue({
 el:"#app",
 data: {
 books: [
 {
 id: 1,
 name: '算法导论',
 date: '2019-01-10',
 price: 85.00,
 count: 1
 },
 {
 id: 2,
 name: '计算机导论',
 date: '2019-02-14',
 price: 90.00,
 count: 2
 },
 {
 id: 3,
 name: '科学导论',
 date: '2019-09-10',
 price: 85.21,
 count: 1
 },
 {
 id: 4,
 name: '网络导论',
 date: '2019-08-21',
 price: 19.02,
 count: 1
 },
 ]
 },
 methods:{
 getFinalPrice(price) {
 return '$' + price.toFixed(2)
 },
 increment(index){
 /*if(this.books[index].count <= 1) return*/
 this.books[index].count--
 },
 decrement(index){
 this.books[index].count++
 },
 removeHandler(index){
 this.books.splice(index,1)
 }
 },
 filters:{
 showPrice(price){
 return '$' + price.toFixed(2)
 }
 },
 computed:{
 totalprice(){
 let tprice = 0
 for(let i = 0; i< this.books.length; i++)
 {
 tprice += this.books[i].price * this.books[i].count
 }
 return tprice
 }
 }
})

style.css

table{
 border: 1px solid #e9e9e9;
 border-collapse: collapse;
 bordre-spacing: 0;
}

th, td {
 padding: 8px 16px;
 border: 1px solid #e9e9e9;
 text-align: left;
}

th{
 backgroud-color: #f7f7f7;
 color: #5c6b77;
 font-weight: 600;
}

到此这篇关于Vue实现购物车实例代码的文章就介绍到这了,更多相关Vue 购物车内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
封装了一个支持匿名函数的Javascript事件监听器
Jun 05 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
Sep 21 Javascript
JavaScript的事件代理和委托实例分析
Mar 25 Javascript
JavaScript基于setTimeout实现计数的方法
May 08 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
Jun 13 Javascript
JQueryEasyUI之DataGrid数据显示
Nov 23 Javascript
微信小程序 闭包写法详细介绍
Dec 14 Javascript
JS和JQuery实现雪花飘落效果
Nov 30 jQuery
微信小程序实现倒计时补零功能
Jul 09 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
Jan 19 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
Feb 16 Javascript
js事件机制----捕获与冒泡机制实例分析
May 22 Javascript
vue实现购物车案例
May 30 #Javascript
vue.js实现简单购物车功能
May 30 #Javascript
vue实现简单学生信息管理
May 30 #Javascript
vue实现学生信息管理系统
May 30 #Javascript
vue实现在线学生录入系统
May 30 #Javascript
VueJS实现用户管理系统
May 29 #Javascript
如何在vue中使用jointjs过程解析
May 29 #Javascript
You might like
php设计模式 Adapter(适配器模式)
2011/06/26 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
基于PHP读取csv文件内容的详解
2013/06/18 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
初识PHP中的Swoole
2016/04/05 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
谈谈对offsetleft兼容性的理解
2015/11/11 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
2016/05/31 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
vue2中使用less简易教程
2018/03/27 Javascript
Vue中如何实现proxy代理
2018/04/20 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
vue-cli 3.x配置跨域代理的实现方法
2019/04/12 Javascript
vue webpack重写cookie路径的方法
2019/07/10 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
2020/05/28 Javascript
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
python保存网页图片到本地的方法
2018/07/24 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
python实现门限回归方式
2020/02/29 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
伦敦剧院及景点门票:Encore Tickets
2018/07/01 全球购物
软件测试工程师结构化面试题库
2016/11/23 面试题
汇科协同Java笔试题
2012/03/31 面试题
Unix控制后台进程都有哪些进程
2016/09/22 面试题
企业总经理职责
2014/02/02 职场文书
乡镇干部先进事迹材料
2014/02/03 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
授权委托书格式
2014/07/31 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
调解协议书范本
2016/03/21 职场文书
物业管理交接协议书
2016/03/24 职场文书
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS