欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vant實(shí)現(xiàn)購(gòu)物車功能

 更新時(shí)間:2020年06月29日 09:36:39   作者:沫熙瑾年  
這篇文章主要為大家詳細(xì)介紹了vant實(shí)現(xiàn)購(gòu)物車功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

做一些電商或者支付頁面,肯定少不了購(gòu)物車功能,一方面正反選,另一方面動(dòng)態(tài)價(jià)格,全選之后再去加減商品數(shù)量(這里必須考慮 里面有很多蛋疼的問題)猛的一想,感覺思路很清晰,但是,真正動(dòng)起手來就各種bug出來了,說實(shí)話 搞這個(gè)購(gòu)物車,浪費(fèi)我整整一下午的時(shí)間,當(dāng)我回過頭捋一遍,其實(shí),半小時(shí)就能完事。就是因?yàn)槿x的時(shí)候 我又去更改商品數(shù)量,然后調(diào)用算價(jià)格的方法導(dǎo)致浪費(fèi)了太多時(shí)間,話不多少,還是先上圖吧 

先看看需求文檔吧

代碼格式不是很整齊 編輯器沒有調(diào)整  湊合看吧

<template>
 <div class="pddingTop">
 <van-nav-bar title='購(gòu)物車' left-text="" fixed></van-nav-bar> 
 <div class="shopContent">
 <ul>
 <li v-for="(item,i) in dataList" :key="i" >
  <div class="shopmain">
  <van-checkbox v-model="item.checked" @change="signchecked(item)"></van-checkbox>
  <div class="shops" @click="todetails(item.productCode)">
  <div class="shopImg"><img :src="item.productUrl" alt=""></div>
  <div class="shopsright">
  <h4>{{item.productName}}</h4>
  <div class="shoprightbot">
   <span>¥{{item.price}}</span>
   <div class="shopradd">
   <button @click.stop="reducebuyNum(item.buyNum,item,item.productCode,i)">-</button>
   <van-field style="width:40px;text-align: center" readonly v-model="item.buyNum" type="number" />
   <button id="button" @click.stop="addbuyNum(item.buyNum,item)">+</button>
   </div>
  </div>
  </div>
  </div>
  </div>
 </li>
 </ul>
 </div>
 <div v-show="!dataList.length" class="shopping">
 <div><img src="./images/shopping.png" alt=""></div>
 <p>暫無商品</p>
 </div>
 <div>
 <van-submit-bar
 :price="total*100"
 button-text="提交訂單"
 @submit="onSubmit"
 >
 <van-checkbox v-model="ischecked" disabled="disabled" @click="checkAll">全選</van-checkbox>
 </van-submit-bar>
 </div>
 </div>
</template>
<script>
//toast 我全局引用了
import {Checkbox, SubmitBar,Card ,Field,Cell,Dialog, Toast } from 'vant';
import utils from '../utils/utils' //這里是自己封裝的方法 獲取
export default {
 components:{
 [SubmitBar.name]:SubmitBar,
 [Checkbox.name]:Checkbox,
 [Card.name]:Card,
 [Field.name]:Field,
 [Cell.name]:Cell,
 },
 data(){
 return{
 img:require("./images/gouwuche.png"),
 ischecked:false,
 dataList:[],
 total:0,
 disabled:false,
 }
 },
 methods:{
 todetails(productCode){
   this.$router.push('/commodityDetails?productCode='+productCode)
 },
  //商品加加
 addbuyNum(num,value){
 if(value.buyNum<=98){
 value.buyNum++
 this.shopNumber(value)
 this.amount(value)
 }
 },
  //商品減減
 reducebuyNum(num,value,productCode,i){
 if(value.buyNum<=1){
 Dialog.confirm({
  title: '溫馨提示',
  message: '是否刪除商品'
  }).then(() => {
  this.https('后臺(tái)接口',{productCode:productCode})
  .then(data=>{
  Toast({
  message:'刪除成功',
       duration:800
  })
  })
  setTimeout(()=>{
       //這里千萬不能再調(diào)用 要把這個(gè)數(shù)組里面去除掉 不然問題是很多
  this.dataList.splice(i,1)
  this.amount(value)
  },1000)
  }).catch(() => {
 });
 }else{
 value.buyNum--
 this.shopNumber(value)
 this.amount(value)
 }
 },
 // 提交訂單
 onSubmit(){
 let cartIdList = []
 this.dataList.forEach(element => {
 if (element.checked) {
  cartIdList.push(String(element.dataId))
 }
 });
 if (cartIdList.length<1) {
 Toast.fail('請(qǐng)選擇訂單');
 } else {
 utils.putlocal('cartIdList',JSON.stringify(cartIdList))
 this.$router.push('/placeorder');
 }
 },
 //加減 這里之前是自己手寫了 但是參考別的網(wǎng)站后 這里是通過接口加減的
 shopNumber(value){
 let data = {
 dataId :value.dataId,
 buyNum:value.buyNum,
 productCode:value.productCode
 }
 this.https('后臺(tái)接口',data)
 .then(data=>{
 
 }) 
 },
 // 單選
 signchecked(val){
 this.amount(val)
 },
 amount(val){
 let arr =[]
 let MoneyList=[]
 this.dataList.forEach(item=>{
 if(item.checked===true){
  MoneyList.push(item)
  arr.push(item.checked)
 }
 })
   //這里就是判斷時(shí)候?yàn)槿x
 if(arr.length===this.dataList.length){
 this.ischecked = true
 }else{
 this.ischecked = false
 } 
   //價(jià)格要置為0 不然一直會(huì)累加的 也會(huì)又很大的問題
 this.total=0;
 for(var i=0;i<MoneyList.length;i++){
 this.total+=MoneyList[i].price*MoneyList[i].buyNum
 }
 },
 // 全選 這里的事件有兩中 一個(gè)是click 一個(gè)是change 不同的事件用不同的方法
 checkAll(){
 this.dataList.forEach(item=>{
 if(this.ischecked==false){
  item.checked=true
 }else{
  item.checked=false
 }
 })
 },
 // 列表
 shoppingCartlist () {
 this.https('后臺(tái)接口',{})
   .then(data=>{
    if(data.code=='success'){
     //這里需要手動(dòng)添加默認(rèn)的checked 后臺(tái)沒有返
  data.data.forEach(element => {
  element.checked = false
  element.num = null
  });
  this.dataList = data.data 
  if(!this.dataList.length){
  this.disabled=true
  }   
    }else {
     Toast.fail(data.message);
    }
   })
 
 }
 },
 mounted () {
 this.shoppingCartlist ()
 }
}
</script>
<style lang="less" scoped>
.van-submit-bar{
 bottom:49px;
 padding-left:20px;
 
}
.shopContent{
 margin-top:18px;
 padding-bottom:90px;
}
.shopping{
 text-align: center;
 padding-top:99px;
 img{
 width:96px;height:96px;
 margin-bottom: 25px;
 } 
}
li{
 padding:0 15px;
 background:#ffffff;
 margin-bottom:10px;
 position: relative;
 height:103px;
 .shopmain{
 display: flex;
 padding:10px 8px 10px 10px;
 position: relative;
 .shops{
 display: flex;
 .shopImg{
 width:103px;height:83px;
 margin:0 7px 0 11px;
 img{
  width:100%;height:100%;
 }
 }
 .shopsright{
 width:185px;
 display: flex;
 flex-direction:column;
 justify-content: space-between;
 h4{
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
 }
 .shoprightbot{
  display: flex;
  justify-content: space-between;
  align-items: center;
  width: 190px;
  span{
  font-size:17px;
  color:#F74022;
  }
 }
 }
 }
 .van-checkbox__icon--checked .van-icon{
 background:red !important;
 }
 }
 button{
 width:24px;height:26px;
 font-size:20px;
 background:#F74022;
 color:#ffffff;
 border:none;
 }
 input{
 width:48px;
 }
} 
.shopradd{
 width: 98px;
 display: flex;
 .van-field__control{
 text-align: center !important;
 }
}
.van-cell{
 padding: 0;
 line-height: 26px
}
.van-field__control{
 height: 26px;
}
</style>

關(guān)于vue.js組件的教程,請(qǐng)大家點(diǎn)擊專題vue.js組件學(xué)習(xí)教程進(jìn)行學(xué)習(xí)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue批量圖片顯示時(shí)遇到的路徑被解析問題

    Vue批量圖片顯示時(shí)遇到的路徑被解析問題

    這篇文章主要介紹了Vue批量圖片顯示時(shí)遇到的路徑被解析問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Vue3+TypeScript實(shí)現(xiàn)Docx/Excel預(yù)覽組件

    Vue3+TypeScript實(shí)現(xiàn)Docx/Excel預(yù)覽組件

    這篇文章主要為大家詳細(xì)介紹了如何使用Vue3+TypeScript實(shí)現(xiàn)Docx/Excel預(yù)覽組件,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考下
    2024-04-04
  • Vue通過vue-router實(shí)現(xiàn)頁面跳轉(zhuǎn)的全過程

    Vue通過vue-router實(shí)現(xiàn)頁面跳轉(zhuǎn)的全過程

    這篇文章主要介紹了Vue通過vue-router實(shí)現(xiàn)頁面跳轉(zhuǎn)的操作步驟,文中有詳細(xì)的代碼示例和圖文供大家參考,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,感興趣的朋友可以參考下
    2024-04-04
  • 詳解vue v-model

    詳解vue v-model

    這篇文章主要介紹了vue v-model的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)vue,感興趣的朋友可以了解下
    2020-08-08
  • Element el-upload上傳組件使用詳解

    Element el-upload上傳組件使用詳解

    本文主要介紹了Element el-upload上傳組件使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 在Vue中使用echarts的方法

    在Vue中使用echarts的方法

    這篇文章主要介紹了Vue中使用echarts的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Vue使用mind-map實(shí)現(xiàn)在線思維導(dǎo)圖

    Vue使用mind-map實(shí)現(xiàn)在線思維導(dǎo)圖

    Vue中的Mind-Map通常是指使用Vue.js這個(gè)前端框架構(gòu)建的思維導(dǎo)圖組件或庫(kù),它可以幫助開發(fā)者在Web應(yīng)用中創(chuàng)建動(dòng)態(tài)、交互式的思維導(dǎo)圖,讓用戶可以直觀地組織信息和結(jié)構(gòu)化數(shù)據(jù),本文介紹了Vue使用mind-map實(shí)現(xiàn)在線思維導(dǎo)圖,需要的朋友可以參考下
    2024-07-07
  • VUE3?Vite打包后動(dòng)態(tài)圖片資源不顯示問題解決方法

    VUE3?Vite打包后動(dòng)態(tài)圖片資源不顯示問題解決方法

    這篇文章主要給大家介紹了關(guān)于VUE3?Vite打包后動(dòng)態(tài)圖片資源不顯示問題的解決方法,可能是因?yàn)樵诓渴鸷蟮姆?wù)器環(huán)境中對(duì)中文文件名的支持不完善,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • 淺析Vue單文件組件與非單文件組件使用方法

    淺析Vue單文件組件與非單文件組件使用方法

    這篇文章主要介紹了Vue單文件組件與非單文件組件使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12
  • Vue刷新修改頁面中數(shù)據(jù)的方法

    Vue刷新修改頁面中數(shù)據(jù)的方法

    今天小編就為大家分享一篇Vue刷新修改頁面中數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09

最新評(píng)論