91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用vuex實現購物車的增加減少移除

發布時間:2020-06-28 17:32:39 來源:億速云 閱讀:271 作者:清晨 欄目:開發技術

這篇文章主要介紹如何用vuex實現購物車的增加減少移除,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

1.store.js(公共的倉庫)

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
 
export default new Vuex.Store({
 state: {
  carList: [] //購物車的商品
 },
 mutations: {
  // 加
  addCar(state, params) {
   let CarCon = state.carList;
   // 判斷如果購物車是否有這個商品,有就只增加數量,否則就添加一個
   // some 只要有一個isHas為true,就為true
   let isHas = CarCon.some((item) => {
    if (params.id == item.id) {
     item.num++;
     return true;
    } else {
     return false;
    }
   })
 
   if (!isHas) {
    let obj = {
     "id": params.id,
     "title": params.title,
     "price": params.price,
     "num": 1,
    }
    this.state.carList.push(obj)
   }
  },
  // 減
  reducedCar(state,params){
   let len=state.carList.length;
   for(var i=0;i<len;i++){
    if(state.carList[i].id==params.id){
     state.carList[i].num--
     if(state.carList[i].num==0){
      state.carList.splice(i,1);
      break;
     }
    }
   }
  },
  //移出
  deleteCar(state,params){
   let len=state.carList.length;
   for(var i=0;i<len;i++){
    if(state.carList[i].id==params.id){
     state.carList.splice(i,1);
     break;
    }
   }
  },
 
   // 初始化購物車,有可能用戶一登錄直接進入購物車
  // initCar(state, car) {
  //  state.carList = car
  // },
 
 },
 actions: {
  // 加
  addCar({ commit }, params) {
   // console.log(params) //點擊添加傳過來的參數
   // 使用setTimeout模擬異步獲取購物車的數據
   setTimeout(function () {
    let result = 'ok'
    if (result == 'ok') {
     // 提交給mutations
     commit("addCar", params)
    }
   }, 100)
  },
  // 減
  reducedCar({ commit }, params) {
   // console.log(params) //點擊添加傳過來的參數
   // 使用setTimeout模擬異步獲取購物車的數據
   setTimeout(function () {
    let result = 'ok'
    if (result == 'ok') {
     // 提交給mutations
     commit("reducedCar", params)
    }
   }, 100)
  },
  // 移出
  deleteCar({ commit }, params) {
   // console.log(params) //點擊添加傳過來的參數
   // 使用setTimeout模擬異步獲取購物車的數據
   setTimeout(function () {
    let result = 'ok'
    if (result == 'ok') {
     // 提交給mutations
     commit("deleteCar", params)
    }
   }, 100)
  }
  // initCar({ commit }) {
  //  setTimeout(function () {
  //   let result = 'ok'
  //   if (result == 'ok') {
  //    // 提交給mutations
  //    commit("initCar", [{
  //     "id": 20193698,
  //     "title": '我是購物車原來的',
  //     "price": 30,
  //     "num": 100,
  //    }])
  //   }
  //  }, 100)
  // }
 },
 getters: {
  //返回購物車的總價
  totalPrice(state) {
   let Carlen = state.carList;
   let money = 0;
   if (Carlen.length != 0) {
    Carlen.forEach((item) => {
     money += item.price * item.num
    })
    return money;
   } else {
    return 0;
   }
  },
  //返回購物車的總數
  carCount(state) {
   return state.carList.length
  }
 },
})

2. list.vue(商品列表)

 <template>
 <!-- 商品列表 -->
 <div id="listBox">
 <!-- -->
 <router-link :to="{path:'/car'}" >跳轉到購物車</router-link>
 <el-table :data="tableData" border >
  <el-table-column fixed prop="id" align="center" label="商品id"></el-table-column>
  <el-table-column prop="title" align="center" label="商品標題"></el-table-column>
  <el-table-column prop="price" align="center" label="商品價格"></el-table-column>
  <el-table-column label="操作" align="center">
  <template slot-scope="scope">
   <el-button @click="addCar(scope.row)" type="text" size="small">加入購物車</el-button>
  </template>
  </el-table-column>
 </el-table>
 </div>
</template>
 
<script>
export default {
 name: "listBox",
 data() {
 return {
  tableData: [] //商品列表
 };
 },
 methods: {
 // 初始化商品列表
 initTable(){
  this.$gAjax(`../static/shopList.json`)
  .then(res => {
   console.log(res)
   this.tableData=res;
  })["catch"](() => {});
 },
 // 加入購物車
 addCar(row){
  // console.log(row)
  // 提交給store里面actions 由于加入購物車的數據要同步到后臺
  this.$store.dispatch('addCar',row)
 }
 
 },
 mounted () {
 this.initTable()
 }
};
</script>
<style>
#listBox {
 width: 900px;
 margin: 0 auto;
}
</style>

3. car.vue(購物車)

<template>
 <!-- 購物車 -->
 <div id="carBox">
 <!-- 商品總數 -->
 <h3 >合計:總共{{count}}個商品,總價{{totalPrice}}元</h3>
 <p v-if="count==0">空空如也!·······</p>
 <div v-else>
  <el-table :data="carData" border >
  <el-table-column fixed prop="id" align="center" label="商品id"></el-table-column>
  <el-table-column prop="title" align="center" label="商品標題"></el-table-column>
  <el-table-column prop="price" align="center" label="商品價格"></el-table-column>
  <el-table-column label="操作" align="center">
   <template slot-scope="scope">
   <el-button @click="reduceFun(scope.row)" type="text" size="small">-</el-button>
   <span >{{scope.row.num}}</span>
   <el-button @click="addCar(scope.row)" type="text" size="small">+</el-button>
 
   <el-button @click="deleteFun(scope.row)" type="text" size="small">刪除</el-button>
   </template>
  </el-table-column>
  </el-table>
 </div>
 </div>
</template>
 
<script>
export default {
 name: "carBox",
 data() {
 return {};
 },
 computed: {
 //購物車列表
 carData() {
  return this.$store.state.carList;
 },
 //商品總數
 count() {
  return this.$store.getters.carCount;
 },
 //商品總價
 totalPrice() {
  return this.$store.getters.totalPrice;
 }
 },
 methods: {
 // 增加數量
 addCar(row){
  this.$store.dispatch('addCar',row)
 },
 // 減數量
 reduceFun(row){
  this.$store.dispatch('reducedCar',row)
 },
 // 刪除
 deleteFun(row){
  this.$store.dispatch('deleteCar',row)
 }
 
 // 用戶首次登錄請求購物車的數據
 // initCar(){
 // this.$store.dispatch('initCar')
 // }
 },
 created () {
 // this.initCar();
 },
 mounted() {}
};
</script>
 
<style>
#carBox {
 width: 900px;
 margin: 0 auto;
}
</style>

以上是如何用vuex實現購物車的增加減少移除的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

孟州市| 中山市| 连南| 望奎县| 宁乡县| 巩义市| 光泽县| 博野县| 饶河县| 连南| 淅川县| 平顺县| 临猗县| 正安县| 体育| 遂溪县| 犍为县| 开原市| 修武县| 义马市| 福泉市| 侯马市| 西乌珠穆沁旗| 湖州市| 兰西县| 平潭县| 林甸县| 阜新市| 岚皋县| 屏山县| 连城县| 尚义县| 花莲县| 延津县| 白银市| 望谟县| 华安县| 岳普湖县| 监利县| 张家口市| 八宿县|