Vue.js搭建移动端购物车界⾯
本⽂介绍了如何使⽤Vue搭建⼀个移动端购物车界⾯,最终实现的功能包括:
1. 选择要最终购买的物品
2. 选择每件物品购买的数量
3. 实时更新所选择物品的总价格
HTML部分
⾸先给出HTML部分代码和注释,显⽰了整个界⾯的结构。
<body>
<div class="checkout">
<div id="app">
<div class="container">
<div class="cart">
<div class="checkout-title">
<span>购物车</span>
</div>
<!-- table -->
<div class="item-list-wrap">
<divclassdivclass="cart-item">
<divclassdivclass="cart-item-head">
<ul>
<li>商品信息</li>
<li>商品⾦额</li>
<li>商品数量</li>
<li>总⾦额</li>
<li>编辑</li>
</ul>
</div>
<ulclassulclass="cart-item-list">
<!--productList在Vue组件中的data定义,包含全部数据,使⽤v-for进⾏遍历显⽰-->
<li v-for="item inproductList">
<divclassdivclass="cart-tab-1">
<divclassdivclass="cart-item-check">
<!--Vue2.0中想为HTML标签绑定属性,必须使⽤v-bind:,绑定内容为对象,这⾥为a标签绑定check属
性,属性值为item中的checked值--> <!--@click是v-on:click的缩写,为这个按钮绑定了点击事件,对应Vue组件methods中定义的⽅法selectProduct-->
<ahrefahref="javascript:void 0" class="item-check-btn"v-bind:class="{'check': item.checked}"@click="selectedProduct(item)">
<svgclasssvgclass="icon icon-ok"><usexlink:hrefusexlink:href="#icon-ok"></use></svg>
</a>
</div>
<divclassdivclass="cart-item-pic">
<imgv-bind:srcimgv-bind:src="item.productImage" alt="烟">
</div>
<divclassdivclass="cart-item-title">
<divclassdivclass="item-name">{{ item.productName }}</div>
</div>
<divclassdivclass="item-include">
<dl>
<dt>赠送:</dt>
<ddv-forddv-for="part in item.parts"v-text="part.partsName"></dd>
</dl>
</div>
</div>
<divclassdivclass="cart-tab-2">
<!--使⽤过滤器,|后⾯加Vue组件filter中定义的过滤器名称-->
<divclassdivclass="item-price">{{ item.productPrice |formatMoney}}</div>
</div>
<divclassdivclass="cart-tab-3">
<divclassdivclass="item-quantity">
<divclassdivclass="select-self select-self-open">
<divclassdivclass="quantity">
<!--绑定changeMoney()⽅法,调整商品数量-->
<ahrefahref="javascript:;"@click="changeMoney(item,-1)">-</a>
<inputtypeinputtype="text" :value="item.productQuantity" disabled>
<ahrefahref="javascript:;"@click="changeMoney(item,1)">+</a>
</div>
</div>
<divclassdivclass="item-stock">有货</div>
</div>
</div>
<divclassdivclass="cart-tab-4">
<divclassdivclass="item-price-total">{{ item.productPrice*item.productQuantity| money('元')}}</div>
</div>
<div class="cart-tab-5">
<divclassdivclass="cart-item-operation">
<!--delConfirm⽅法控制删除时的弹框显⽰状态-->
<ahrefahref="javascript:void 0" class="item-edit-btn"@click="delConfirm(item)">
<svg class="iconicon-del"><use xlink:href="#icon-del"></use></svg>
</a>
</div>
</div>
</li>
</ul>
</div>
</div>
<!-- footer -->
<div class="cart-foot-wrap">
<divclassdivclass="cart-foot-l">
<divclassdivclass="item-all-check">
<ahrefahref="javascript:void 0">
<spanclassspanclass="item-check-btn" :class="{'check':checkAllFlag}"@click="checkAll(true)">
<svg class="iconicon-ok"><usexlink:hrefusexlink:href="#icon-ok"></use></svg>
</span>
<span v-show="!checkAllFlag">全选</span>
</a>
</div>
<divclassdivclass="item-all-del">
<ahrefahref="javascript:void 0" class="item-del-btn"@click="checkAll(false)">
<spanv-showspanv-show="checkAllFlag">取消全选</span>
</a>
</div>
</div>
<divclassdivclass="cart-foot-r">
<divclassdivclass="item-total">
<!--totalMoney是商品总⾦额,在Vue组件中通过⽅法被修改-->
Item total: <span class="total-price">{{totalMoney| money('元')}}</span>
</div>
<divclassdivclass="next-btn-wrap">
<ahrefahref="address.html" class="btn btn--red" >结账</a>
</div>
</div>
</div>
</div>
</div>
<!--绑定⼀个md-show类,通过delFlag变量控制这个类,这个类可以让弹框显⽰或隐藏-->
<div class="md-modal modal-msg md-modal-transition"id="showModal" v-bind:class="{'md-show':delFlag}"> <div class="md-modal-inner">
<div class="md-top">
<!--关闭按钮,通过改变delFlag值控制弹框状态-->
<buttonclassbuttonclass="md-close" @click="delFlag = false">关闭</button>
</div>
<div class="md-content">
<divclassdivclass="confirm-tips">
<pidpid="cusLanInfo">你确认删除此订单信息吗?</p>
</div>
<div class="btn-wrapcol-2">
<!--选择yes则调⽤delProduct删除元素-->
<button class="btnbtn--m" id="btnModalConfirm"@click="delProduct">Yes</button>
<button class="btnbtn--m btn--red" id="btnModalCancel"@click="delFlag=false">No</button>
</div>
</div>
</div>
</div>
<!--遮罩层,整个都是通过delFlag进⾏控制的,v-if根据表达式的真假条件渲染元素-->
<div class="md-overlay"v-if="delFlag"></div>
</div>
</div>
</body>
对应的关键注释在代码中给出,下⾯结合Vue.js的代码,对主要部分进⾏解释。
⼀、Vue组件基本格式
⼀个Vue组件的基本代码如下:
new Vue({
el:'#app',
data: {},
filters: {},
mounted: function() {},
methods: {}
});
在JS代码中,使⽤new Vue即可声明⼀个Vue组件。Vue组件主要包括以下⼏个字段。
1. el字段:el字段⽤来定义该组件在HTML中的哪个位置⽣效,需要传⼊HTML中某个元素的id值。这⾥传⼊了#app,表⽰HTML中id为app的元素内部都是这个Vue组件的作⽤范围。
2. data字段:data字段定义了Vue组件中的数据,可能在HTML中进⾏渲染。在本应⽤中,商品的价格、名称、图⽚链接等信息,都是使⽤Vue组件中data字段内的数据进⾏渲染的。
3. filter字段:filter字段是⼀个过滤器,在本应⽤中,针对价格等需要格式化的⽂本,就可以使⽤filter进⾏过滤。
4. mounted字段:mounted字段通常定义⼀个⽅法,这个⽅法将在页⾯加载完成时⾃动执⾏,在React等框架中都有类似的机制。
5. method字段:method字段⽤来定义Vue组件中需要⽤到的⽅法,这个字段的内容往往是需要投⼊时间最多的部分,例如页⾯中选择商品、增加数量等逻辑,都是在这个字段中进⾏编辑的。
以上就是⼀个vue组件的主要组成部分,下⾯对各个部分功能的代码编写进⾏简要介绍。
⼆、数据渲染
数据渲染部分,要渲染的数据都存放在data中。每⼀个商品的信息都被模拟存储在了cart.json的⽂件中。我们可以实现数据⾃动加载,基本思路是:在method字段中定义⼀个⽅法,⽤来加载cart.json中的数据,并将其存放到data字段中定义的对应变量中。在mouted字段中,⾃动调⽤这个⽅法。这样就实现了页⾯加载完成后⾃动加载数据。对应的JS代码和注释如下:
data: {
//存放商品json数据信息
productList: []
}
methods: {
//cartView()⽅法⽤来加载数据,并将数据存储在这个Vue组件中的productList变量中
cartView: function() {
var _this = this;
//使⽤vue-resource模块加载数据,类似Jquery中的AJAX,返回数据存放在res.body中
this.$("data/cartData.json", {"id":123}).then(function(res) {
_this.productList =sult.list;
// _alMoney = alMoney;
});
}
}
mounted: function() {
/
/执⾏代码放在$nextTick中,保证页⾯结构加载完毕后再执⾏函数
this.$nextTick(function() {
this.cartView(); //使⽤this调⽤methods中定义的cartView()⽅法
})
}
完成了这部分代码,所有商品的数据就存放在了组件中变量名为productList的字段中。
在前端HTML部分的进⾏调⽤,需要使⽤v-for指令。这个指令⽤来循环遍历Vue中的数据,代码如下:
<ul class="cart-item-list">
<li v-for="item in productList">
<div class="cart-tab-1">
<div class="cart-item-check">
</div>
<div class="cart-item-pic">
<img v-bind:src="item.productImage" alt="烟">
</div>
<div class="cart-item-title">
<div class="item-name">{{ item.productName}}</div>
</div>
<div class="item-include">
<dl>
<dt>赠送:</dt>
<dd v-for="part in item.parts"v-text="part.partsName"></dd>
</dl>
svg canvas</div>
</div>
</ul>
通过v-for指令,遍历了变量productList中的数据,并在内部的HTML中调⽤。利润item.productImage获取对应图⽚URL地址;item.productName获取商品名称等。这样,就⾃动⽣成了⼀个商品信息列表。
下⼀部分将介绍逻辑代码的编写。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论