【Vue.js】Vue.js购物车[小项目总结]

技术文章 胡成

前言

关于Vue.js的项目总结心得我就用一句话概括,Vue的基础操作很重要,向v-bind:的种种指令,

v-for的循环数据绑定,v-on:click事件处理等等,基础真的很重要!。

这俩天做了个关于购物车的小项目,里面的功能,动态数据加载,都是用Vue来实现的,下面我会把我做项目分享上来。

1)动态数据加载

实例图:

20180822202219.png

JS实例代码如下:

data: {
		leftarr: [ //推荐左边商品数据动态加载
			{
				name: "JavaScript DOM编程艺术",
				original: 39.00,
				current: 29.30,
				purchase: "购买"
			},
			{
				name: "解禁(当当网独家首发)",
				original: 28.00,
				current: 19.40,
				purchase: "购买"
			},
			{
				name: "地王之王(金融危机下房地产行...",
				original: 32.80,
				current: 25.10,
				purchase: "购买"
			},
			{
				name: "逃庄",
				original: 36.00,
				current: 27.70,
				purchase: "购买"
			},
		],
		rightarr: [ //推荐左边商品数据动态加载
			{
				name: "深入浅出MySQL数据库开发、优...",
				original: 39.00,
				current: 29.30,
				purchase: "购买"
			},
			{
				name: "大玩家(马未都、王刚推荐!央...",
				original: 28.00,
				current: 19.40,
				purchase: "购买"
			},
			{
				name: "都市风水师--官场风水小说:一...",
				original: 32.80,
				current: 25.10,
				purchase: "购买"
			},
			{
				name: "国戏(以麻将术语解读宦海沉浮...",
				original: 36.00,
				current: 27.70,
				purchase: "购买"
			},
		],

HTML代码:

        <ul id="productuls1" v-for="(iten,index) in leftarr">
		<li class="productuls1_list_1">
		  <a href="#">{{iten.name}}</a>
		</li>
	        <li class="productuls1_list_2">¥{{iten.original.toFixed(2)}}</li>
		<li class="productuls1_list_3">¥{{iten.current}}</li>
		<li class="productuls1_list_4">
		  <a href="#" @click="addARRbotton(iten)">{{iten.purchase}}</a>
		</li>
	</ul>

v-for="(iten,index) in leftarr:循环数组里的对象

{{iten.name}}:对象点出属性名获取值(商品名)

{{iten.original.toFixed(2)}}:对象点出属性保留小数点后两位数字

{{iten.current}}:对象点出属性名获取值

{{iten.purchase}}:对象点出属性名获取值



(2)点击购买添加到购物车计算价格:

添加前:

20180822203803.png


添加后:

20180822203822.png

HTML代码:

<tr class="shopping_product_list" id="shoppingProduct_01" v-for="(iten,index) in newarr">
	<td class="shopping_product_list_1">
	   <a href="#" class="blue">{{iten.name}}</a>
	</td>
	<td class="shopping_product_list_2">{{iten.integral}}</td>
	<td class="shopping_product_list_3">¥<span>{{iten.original}}</span></td>
	<td class="shopping_product_list_4">¥<span>{{iten.current}}</span> ({{iten.zhe.toFixed(0)}}折)</td>
	<td class="shopping_product_list_5"><input class="int" type="text" v-model.number="iten.num" @blur="intjudge(iten)"></td>
	<td class="shopping_product_list_6">
	  <a href="#" @click="removegoods(index)">删除</a>
	</td>
</tr>

JS代码:

	methods: { //事件
		addARRbotton(iten) { //购买事件
			iten = Object.assign({}, iten, {
				num: 1,
				integral: iten.current * 10,
				zhe: iten.current / iten.original
			}) //将一个新属性合并到数组里
			let bool = true;
			for(var i of this.newarr) {
				if(i.name == iten.name) {
					i.num++;
					bool = false;
				}
			}
			if(bool) {

				this.newarr.push(iten); //添加到最末尾一行
			}
		},
		removegoods(index) { //按下标删除
			this.newarr.splice(index, 1);
		},
		intjudge(inte){//输入框失焦事件
			var int =/^[1-9][0-9]*$/;
			if (!int.test(inte.num)) {
				alert("输入错误,请输入0-9的数字!")
				inte.num=1;
			}
		}
		
	},
	computed: { //计算属性
		totalPricefun: function() { //总金额监视器
			var totalPrice = 0; //申明一个总金额
			for(var i of this.newarr) { //循环新数组里的数据
				totalPrice += i.current * i.num; //总金额=当当价*数量
			}
			return totalPrice; //返回计算后的总金额
		},

		totalScorefun: function() { //总积分监视器
			var totalscore = 0; //申明一个总积分
			for(var i of this.newarr) { //循环新数组里的数据
				totalscore += i.integral * i.num; //总积分=当当价*数量
			}
			return totalscore; //返回计算后的总积分

		},

		totalDisPricefun: function() { //节省总金额监视器
			var discount = 0; //申明一个节省总金额
			for(var i of this.newarr) { //循环新数组里的数据
				discount += i.original * i.num - i.current * i.num; ////节省总金额+等于单品价格*数量-当当价*数量
			}
			return discount; //返回计算后的节省总金额
		},
	},



(3)对象节点点击隐藏/显示

点击隐藏前:

20180822204656.png

点击隐藏后:

20180822204709.png

HTML代码:

<div class="head_middle_right"><img @click="switchbox = !switchbox" :src="foldbox" /></div>

<div class="head_main" v-bind:class="{head_mainclose:switchbox}">
						<div class="head_main_left">
							<ul id="productuls1" v-for="(iten,index) in leftarr">
								<li class="productuls1_list_1">
									<a href="#">{{iten.name}}</a>
								</li>
								<li class="productuls1_list_2">¥{{iten.original.toFixed(2)}}</li>
								<li class="productuls1_list_3">¥{{iten.current}}</li>
								<li class="productuls1_list_4">
									<a href="#" @click="addARRbotton(iten)">{{iten.purchase}}</a>
								</li>
							</ul>
						</div>

JS代码:

  data: {  
	switchbox: false,
	},
foldbox() {//监视事件
			if(this.switchbox == false) {//判断条件为对象赋值
				return "img/shopping_arrow_up.gif";//返回一个路径
			} else {
				return "img/shopping_arrow_down.gif";//返回一个路径
			}
		}

v-bind:class="{head_mainclose:switchbox}switchbox是个布尔对象当它是true是将执行head_mainclose样式(隐藏);

@click="switchbox = !switchbox" :src="foldbox":点击时触发事件,返回一个路径。



——来自胡小哥Vue.js分享文章(持续更新中...)

还能输出{{restrictNumber}}个字符  
  • {{reply.author}}

    {{CommonUtil.formateDate(reply.ac_CommentDate).shortTime}}
  • 回复了{{Comments.author}} :