第五節 單件商品金額計算和單選全選功能javascript
1.vue精髓在於操做data模型來改變dom,渲染頁面,而不是直接去改變domhtml
2.加減改變總金額功能:vue
html: <div class="cart-tab-3"> <div class="item-quantity"> <div class="select-self select-self-open"> <div class="quentity"> <a href="javascript:;" v-on:click="changeMoney(item,-1)">-</a> <input type="text" v-model="item.productQuentity"> <!--雙向數據綁定功能,實現總金額實時變化功能--> <a href="javascript:;" @click="changeMoney(item,1)">+</a> </div> </div> <div class="item-stock">有貨</div> </div> </div> <div class="cart-tab-4"> <!-- 總金額 --> <div class="item-price-total">{{item.productPrice*item.productQuentity | formatMoney}}</div> </div> js: methods:{ cartView: function () { //.... }, changeMoney:function (product,way) { if(way>0){ product.productQuentity++; }else{ product.productQuentity--; if(product.productQuentity<0){ product.productQuentity=1; } } } }
效果:
☞java
總金額57.00是實時計算的過程,一旦其中有一個變量變化,其餘的也會實時進行變化,這也是vue十分方便的地方。dom
3.單選商品功能svg
html:this
<a href="javascipt:;" class="item-check-btn" v-bind:class="{'check':item.checked}" @click="selctectedProduct(item)"> <!--class是object--> js: selctectedProduct:function (item) { if(typeof item.checked =='undefined'){ /*局部註冊和全局註冊item,vue沒法監聽undefined字段*/ //Vue.set(item,"checked",true);//全局註冊 this.$set(item,"checked",true);//局部註冊 }else{ item.checked = !item.checked; } },
效果:spa
4.全選和全不選
html:
<div class="cart-foot-l"> <div class="item-all-check"> <a href="javascipt:;"> <span class="item-check-btn" :class="{'check':checkAllFlag}" @click="checkAll(true)"> <!--@click裏能夠寫一元和三元表達式,可是不容許寫複雜的業務邏輯如@click="checkAllFlag=true"--> <svg class="icon icon-ok"><use xlink:href="#icon-ok"></use></svg> </span> <span>全選</span> </a> </div> <div class="item-all-del"> <a href="javascipt:;" class="item-del-btn" @click="checkAll(false)"> 取消全選 </a> </div> </div> js: data:{ totalMoney:0, productList:[], checkAllFlag:false /*初始值*/ }, checkAll:function (flag) { this.checkAllFlag=flag; var _this=this; this.productList.forEach(function(item,index){ if(typeof item.checked =='undefined'){ _this.$set(item,"checked",_this.checkAllFlag);//局部註冊 }else{ item.checked = _this.checkAllFlag; } }); }
效果:

v-model具備數據雙向綁定功能,單商品總金額是依賴productproductQuentity,會實時發生變化,而所有商品總金額,是個變量經過每次操做觸發事件進行改變
5.刪除單商品訂單功能
html: <a href="javascript:;" class="item-edit-btn" @click="delConfirm(item)"> <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"> <button class="md-close" @click="delFlag=false">關閉</button> </div> <div class="md-content"> <div class="confirm-tips"> <p id="cusLanInfo">你確認刪除此訂單信息嗎?</p> </div> <div class="btn-wrap col-2"> <button class="btn btn--m" id="btnModalConfirm" @click="delProduct()">Yes</button> <button class="btn btn--m btn--red" id="btnModalCancel" @click="delFlag=false">No</button> </div> </div> </div> </div> <div class="md-overlay" id="showOverLay" v-if="delFlag"></div> js: delConfirm:function (item) { this.delFlag=true; this.carProduct=item; }, delProduct:function () { var index=this.productList.indexOf(this.carProduct); this.productList.splice(index,1); /*這裏應該用http調用後臺接口進行刪除*/ /*而後v-for會實時從新渲染*/ this.delFlag=false; }