vuex實現(xiàn)的簡單購物車功能示例
本文實例講述了vuex實現(xiàn)的簡單購物車功能。分享給大家供大家參考,具體如下:
購物車組件
<template>
<div>
<h1>vuex-shopCart</h1>
<div class="shop-listbox">
<shop-list/>
</div>
<h2>已選商品</h2>
<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)建當(dāng)個store模塊,然后默認(rèn)輸出,在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
}
希望本文所述對大家vue.js程序設(shè)計有所幫助。
相關(guān)文章
vue-cli對element-ui組件進(jìn)行二次封裝的實戰(zhàn)記錄
組件類似于需要多個地方用到的方法,在Vue中組件就是一種復(fù)用(經(jīng)常使用)一個功能的手段,下面這篇文章主要給大家介紹了關(guān)于Vue?element?ui二次封裝的相關(guān)資料,需要的朋友可以參考下2022-06-06
Vue3中watch監(jiān)聽器及源碼學(xué)習(xí)
本文主要介紹了Vue3中watch監(jiān)聽器及源碼學(xué)習(xí),Watch偵聽器在Vue3中特性進(jìn)行了一些改變和優(yōu)化,下面來詳解的介紹一下基本使用,具有一定的參考價值,感興趣的可以了解一下2024-01-01
vue+elementUI組件table實現(xiàn)前端分頁功能
這篇文章主要為大家詳細(xì)介紹了vue+elementUI組件table實現(xiàn)前端分頁功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12

