Vue实现简单版的购物车

首先我们要导入Vue的js

	<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>

这次我用到了bootstrap的css样式

<link href="https://cdn.bootcss.com/twitter-bootstrap/4.3.1/css/bootstrap.css" rel="stylesheet">

这个bootstrap的css,我们可以去BootCDN中文网下载
官方网站: https://www.bootcdn.cn/
在搜索框搜索:bootstrap —>然后我们点击我画的红色,然后点击进去,会有很多版本,
在这里插入图片描述
然后我们找到版本4.3.1 ,要复制的是我画红线的那个bootstrap.css
在这里插入图片描述
还有一个Tween.js,是一个很重要的js
你试了就知道它的强大!!! 哈哈哈
在这里插入图片描述
然后找到/tween.js/16.3.4/版本的
在这里插入图片描述

接下来我们就放 购物车的代码:
index.html
代码如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
		<link href="https://cdn.bootcss.com/twitter-bootstrap/4.3.1/css/bootstrap.css" rel="stylesheet">
		<script src="https://cdn.bootcss.com/tween.js/16.3.4/Tween.js"></script>
		
	</head>
	<body>

		<div id="app" class="container">
			<table class="table">
				<thead>
					<tr>
						<th>产品编号</th>
						<th>产品名字</th>
						<th>购买数量</th>
						<th>产品单价</th>
						<th>产品总价</th>
						<th>操作</th>
					</tr>
				</thead>
				<tbody>
					<tr v-for="(item , index) in message">
						<td @click="jia(index)">{{item.id}}</td>
						<td>{{item.name}}</td>
						<td>
							<button type="button" class="btn tn-primary" @click="subtract(index)">-</button>
							<input type="text" v-model="item.quantity">
							<button type="button" class="btn tn-primary" @click="add(index)">+</button>
						</td>
						<td>{{item.price | filtermoney}}</td>
						<!--<td>{{arr[index].one}}</td>-->
						<td>{{item.price*item.quantity | filtermoney}}</td>
						<td>
							<button type="button" class="btn btn-danger" @click="remove(index)">移除</button>
						</td>
					</tr>
					<tr>
						<td>总购买价
						</td>
						<td>
							{{animatenum | filtermoney}}
						</td>
						<td>总购买数量
						</td>
						<td>

						</td>
						<td colspan="2">
							<button type="button" class="btn btn-danger" @click="empty()">清空购物车</button>
						</td>
					</tr>
				</tbody>
			</table>

			<p v-if="message.length===0">您的购物车为空</p>
		</div>
		
		<script>
			var vm = new Vue({
				el: "#app",
				data: {
					totalPrice: 0,
					animatenum: 0,
					message: [{
						id: 001,
						name: '联想笔记本',
						quantity: 0,
						price: 4000
					}, {
						id: 002,
						name: '华硕笔记本',
						quantity: 0,
						price: 5000
					}, {
						id: 003,
						name: '机械师笔记本',
						quantity: 0,
						price: 7000
					}, {
						id: 004,
						name: '苹果笔记本',
						quantity: 0,
						price: 8000
					}]
				},
				watch: {
					toComput2: function(newValue, oldValue) {
						this.tween(newValue, oldValue);
					}
				},
				computed: {
					//计算总金额
					toComput2: function() {
						var vm = this;
						//每次进来要重置总金额
						vm.totalPrice = 0;
						this.message.forEach(function(mess) {
							vm.totalPrice += parseInt(mess.price * mess.quantity);
						})
						return this.totalPrice;
					}
				},
				filters: {
					filtermoney: function(value) {
						return '¥' + value;
					}
				},
				mounted: function() {
					this.tween('0', '0');
				},
				methods: {
					//计算总数的方法为什么写在methods里面就不行?
					toComput: function() {
						var vm = this;
						vm.message.forEach(function(mess) {
							vm.totalPrice += parseInt(mess.price * mess.quantity);
						})
						return vm.totalPrice;
					},
					add: function(index) {
						var vm = this;
						vm.message[index].quantity++;
					},
					subtract: function(index) {
						var vm = this;
						vm.message[index].quantity--;
						if (vm.message[index].quantity <= 0) {
							if (confirm("你确定移除该商品?")) {
								vm.message.splice(index, 1)
							}
						}

					},
					remove: function(index) {
						var vm = this;
						if (confirm("你确定移除该商品?")) {
							vm.message.splice(index, 1)
						}
					},
					empty: function() {
						var vm = this;
						vm.message.splice(0, vm.message.length);
					},
					jia: function(index) {
						var vm = this;
						vm.arr[index].one++;
					},
					tween: function(newValue, oldValue) {
						var vm = this;
						var twen = new TWEEN.Tween({
							animatenum: oldValue
						});

						function animate() {
							requestAnimationFrame(animate);
							TWEEN.update();
						};
						twen.to({
							animatenum: newValue
						}, 750);
						twen.onUpdate(function() {
							//toFixed();保留几位小数
							vm.animatenum = this.animatenum.toFixed();
						})
						twen.start();
						animate();
					}
				}
			});
		</script>

	</body>
</html>

运行效果:
在这里插入图片描述
我们试一下加一下购买数量,在买一台联想笔记本:
我们可以清楚的看到我们的总购买的价格也加了。
在这里插入图片描述
我们在删除一个,我们删除苹果笔记本,
它会提示你是否要删除
在这里插入图片描述
删除成功
在这里插入图片描述

?!!!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个基于 Vue 2 实现简单购物车的示例代码: HTML: ``` <div id="app"> <h2>商品列表</h2> <ul> <li v-for="item in goods" :key="item.id"> {{ item.name }} - {{ item.price }}元 <button @click="addToCart(item)">加入购物车</button> </li> </ul> <h2>购物车</h2> <table> <thead> <tr> <th>名称</th> <th>单价</th> <th>数量</th> <th>小计</th> <th>操作</th> </tr> </thead> <tbody> <tr v-for="(item, index) in cart" :key="item.id"> <td>{{ item.name }}</td> <td>{{ item.price }}元</td> <td> <button @click="minusFromCart(index)" :disabled="item.quantity === 1">-</button> {{ item.quantity }} <button @click="addToCart(item)">+</button> </td> <td>{{ item.price * item.quantity }}元</td> <td> <button @click="removeFromCart(index)">删除</button> </td> </tr> </tbody> </table> <p>总价:{{ totalPrice }}元</p> </div> ``` JavaScript: ``` new Vue({ el: '#app', data: { goods: [ { id: 1, name: '商品1', price: 10 }, { id: 2, name: '商品2', price: 20 }, { id: 3, name: '商品3', price: 30 } ], cart: [] }, methods: { addToCart(item) { let index = this.cart.findIndex(cartItem => cartItem.id === item.id) if (index !== -1) { this.cart[index].quantity++ } else { this.cart.push({ id: item.id, name: item.name, price: item.price, quantity: 1 }) } }, minusFromCart(index) { if (this.cart[index].quantity > 1) { this.cart[index].quantity-- } }, removeFromCart(index) { this.cart.splice(index, 1) } }, computed: { totalPrice() { return this.cart.reduce((total, item) => total + item.price * item.quantity, 0) } } }) ``` 在这个示例中,首先定义了一个商品列表和一个购物车列表,其中商品列表包含了每个商品的名称、价格和 ID,购物车列表为空。在页面上展示商品列表时,为每个商品添加了一个加入购物车的按钮,并在点击按钮时调用 `addToCart` 方法将对应商品信息加入购物车列表中。在页面上展示购物车列表时,使用了一个表格来展示每个商品的名称、价格、数量和小计金额,并为每个商品添加了加减和删除按钮,同时使用了一个计算属性来计算购物车中所有商品的总价。在 `addToCart` 方法中还实现了判断购物车中是否已存在该商品的逻辑,如果存在则将对应商品的数量加 1,否则将该商品添加到购物车列表中。在 `minusFromCart` 方法中实现了减少购物车中商品数量的逻辑,并且如果商品数量已经为 1,则减少按钮会被禁用。在 `removeFromCart` 方法中通过 `splice` 方法实现了删除购物车列表中的商品的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值