Vue.js_实例_订单列表

下面做了一个商品订单列表的页面,对商品进行选择并进行价格合计的计算。

对新学习vue的同学可以作为小练习进行训练。

运行截图如下:

代码中使用了axios.js来实现对数据的异步操作。

axios.js链接:axios.min.js

下面是代码部分:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>vue_实例_订单列表</title>
		<script src="../vue/vue.min.js" type="text/javascript" charset="utf-8"></script>
		<script src="../vue/axios.min.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<!-- v-cloak隐藏未编译的变量,直到vue实例准备就绪 -->
		<form id="main" v-cloak>
			<h3>订单列表</h3>
			<ul>
				<!-- 循环输出订单数组,设置选项点击后的样式-->
				<li v-for="service in services" v-on:click="toggleActive(service)" v-bind:class="{'active':service.active}">
					<!-- 显示订单中的服务名,价格
					vue.js中定义了货币过滤器,用于格式会价格 -->
					{{service.name}}<span>{{service.price | currency}}</span>
				</li>
			</ul>
			<div class="total">
				<!-- 计算所有服务的价格,并格式化货币 -->
				总价:<span>{{total() | currency}}</span>
			</div>
		</form>
		<script type="text/javascript">
			//自定义过滤器“currency”
			Vue.filter('currency', function(value) {
				return  value.toFixed(2) + '¥';
			})
			var demo = new Vue({
				el: '#main',
				data() {
					//定义模型属性
					//视图将循环输出数组的数据
					return {
						services: []
					}
				},
				methods: {
					toggleActive: function(s) {
						s.active = !s.active;
					},
					/* 计算总价的方法 */
					total: function() {
						var total = 0;
						this.services.forEach(function(s) {
							if (s.active) {
								total += s.price;
							}
						});
						return total;
					}
				},
				/*axios 异步加载json数据 
					mounted()钩子函数一般用来向后端发起请求,拿到数据后做一些业务处理。
					该函数在模版渲染完成后才被调用
				*/
				mounted() {
					axios.get('../data/goodsData.json')
						.then(function(res) {
							demo.services = res.data
						}).catch(function(error) {
							console.log(error);
						});
				}
			})
		</script>
	</body>
</html>

下面是css样式代码:

	[v-cloak] {
				display: none;
			}

			* {
				margin: 0;
				padding: 0;
			}

			body {
				font: 15px/1.3 'Open Sans', sans-serif;
				color: #5e5b64;
				text-align: center;
			}

			a,
			a:visited {
				outline: none;
				color: #389dc1;
			}

			a:hover {
				text-decoration: none;
			}
			/*-------------------------
			    	订单表单
			    --------------------------*/

			form {
				background-color: #61a1bc;
				border-radius: 2px;
				box-shadow: 0 1px 1px #ccc;
				width: 400px;
				padding: 35px 60px;
				margin: 30px auto;
			}

			form h3 {
				color: #fff;
				font-size: 32px;
				font-family: 'Cookie', cursive;
				font-weight: normal;
				line-height: 1;
				text-shadow: 0 3px 0 rgba(0, 0, 0, 0.5);
			}

			form ul {
				list-style: none;
				color: #fff;
				font-size: 16px;
				font-weight: bold;
				text-align: left;
				margin: 14px 0 15px;
			}

			form ul li {
				padding: 12px 30px;
				background-color: #e35885;
				margin-bottom: 8px;
				box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);
				cursor: pointer;
			}

			form ul li span {
				float: right;
			}

			form ul li.active {
				background-color: #8ec16d;
			}

			div.total {
				border-top: 1px solid rgba(255, 255, 255, 0.5);
				padding: 15px 30px;
				font-size: 20px;
				font-weight: bold;
				text-align: left;
				color: #fff;
			}

			div.total span {
				float: right;
			}

本实例整体结构还是比较简单的,其中使用了一个自定义过滤器(Vue.filter),来过滤价格数据,保留两位小数。

方法中写了一个“total”方法,计算被选中商品价格的总价,利用forEach()函数进行遍历计算。

mounted()钩子函数中使用axios.js来对数据进行异步加载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值