您好,登錄后才能下訂單哦!
這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)使用vuex如何實現(xiàn)一個購物車功能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
Vue是一套用于構(gòu)建用戶界面的漸進式JavaScript框架,Vue與其它大型框架的區(qū)別是,使用Vue可以自底向上逐層應用,其核心庫只關(guān)注視圖層,方便與第三方庫和項目整合,且使用Vue可以采用單文件組件和Vue生態(tài)系統(tǒng)支持的庫開發(fā)復雜的單頁應用。
購物車組件
<template> <div> <h2>vuex-shopCart</h2> <div class="shop-listbox"> <shop-list/> </div> <h3>已選商品</h3> <div class="shop-cartbox"> <shop-cart/> </div> </div> </template> <script> import shopList from "./shop-list"; import shopCart from './shop-cart'; export default{ name:'shop', components:{ 'shop-list':shopList, 'shop-cart':shopCart } } </script>
商品列表
<template> <div class="shop-list"> <table> <tr class="shop-listtitle"> <td>id</td> <td>名稱</td> <td>價格</td> <td>操作</td> </tr> <tr v-for="item in shopList" class="shop-listinfo"> <td>{{item.id}}</td> <td>{{item.name}}</td> <td>{{item.price}}</td> <td><button @click="addToCart(item)">加入購物車</button></td> </tr> </table> </div> </template> <script> import{mapActions} from "vuex"; export default{ name:'shopList', data(){ return{ } }, computed:{ shopList(){ return this.$store.getters.getShopList } }, methods:{ ...mapActions(['addToCart']) } } </script> <style lang="less" scoped> @import url('../../static/public.less'); </style>
選中商品列表
<template> <div class="shop-list"> <table> <tr class="shop-listtitle"> <td>id</td> <td>名稱</td> <td>價格</td> <td>數(shù)量</td> <td>操作</td> </tr> <tr v-for="item in cartData" class="shop-listinfo"> <td>{{item.id}}</td> <td>{{item.name}}</td> <td>{{item.price}}</td> <td>{{item.num}}</td> <td><button class="shop-dele dele-btn" @click="deletShop(item)">刪除</button></td> </tr> <tr v-if="cartData.length<=0"> <td colspan="5">暫無數(shù)據(jù)</td> </tr> <tr> <td colspan="2">總數(shù):{{totalNum}}</td> <td colspan="2">總價格:{{totalPrice}}</td> <td><button class="dele-cart dele-btn" @click="clearCart">清空購物車</button></td> </tr> </table> </div> </template> <script> import {mapGetters,mapActions} from "vuex"; export default{ name:'shopCart', data(){ return{ } }, computed:{ ...mapGetters({ cartData:'addShopList', totalNum:'totalNum', totalPrice:'totalPrice' }) }, methods:{ ...mapActions({ clearCart:'clearToCart', deletShop:'deletToShop' }) } } </script> <style lang="less" scoped> @import url('../../static/public.less'); .dele-btn{ background-color: red !important; } .dele-btn:hover{ background-color: #bd0000 !important; } </style>
vuex 創(chuàng)建
npm install vuex --save
,創(chuàng)建vuex文件夾,在文件夾中創(chuàng)建store.js,引入vuex;
import Vue from "vue"; import Vuex from 'vuex'; import cart from "./modules/cart"; Vue.use(Vuex); export default new Vuex.Store({ modules:{ cart } })
建立一個模塊文件夾modules,里面創(chuàng)建創(chuàng)建當個store模塊,然后默認輸出,在store.js中引入;
const state = { shop_list: [{ id: 11, name: '魚香肉絲', price: 12, }, { id: 22, name: '宮保雞丁', price: 14 }, { id: 34, name: '土豆絲', price: 10 }, { id: 47, name: '米飯', price: 2 },{ id: 49, name: '螞蟻上樹', price: 13 }, { id: 50, name: '臘肉炒蒜薹', price: 15 }], add:[] } const getters ={ //獲取商品列表 getShopList:state => state.shop_list, //獲取購物車列表 addShopList:state => { return state.add.map(({id,num})=>{ let product = state.shop_list.find(n => n.id == id); if(product){ return{ ...product, num } } }) }, //獲取總數(shù)量 totalNum:(state,getters) =>{ let total =0; getters.addShopList.map(n=>{ total += n.num; }) return total; }, //計算總價格 totalPrice:(state,getters)=>{ let total=0; getters.addShopList.map(n=>{ total += n.num*n.price }) return total; }, } const actions={ //加入購物車 addToCart({commit},product){ commit('addCart',{ id:product.id }) }, //清空購物車 clearToCart({commit}){ commit('clearCart') }, //刪除單個物品 deletToShop({commit},product){ commit('deletShop',product) } } const mutations ={ //加入購物車 addCart(state,{id}){ let record = state.add.find(n => n.id == id); if(!record){ state.add.push({ id, num:1 }) }else{ record.num++; } }, //刪除單個物品 deletShop(state,product){ state.add.forEach((item,i)=>{ if(item.id == product.id){ state.add.splice(i,1) } }) }, //清空購物車 clearCart(state){ state.add=[]; } } export default{ state, getters, actions, mutations }
上述就是小編為大家分享的使用vuex如何實現(xiàn)一個購物車功能了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。