基于vuex實(shí)現(xiàn)購(gòu)物車(chē)功能
更新時(shí)間:2021年01月10日 09:37:49 作者:棟棟很優(yōu)秀啊
這篇文章主要為大家詳細(xì)介紹了基于vuex實(shí)現(xiàn)購(gòu)物車(chē)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了vuex實(shí)現(xiàn)購(gòu)物車(chē)功能的具體代碼,供大家參考,具體內(nèi)容如下
先看效果:

代碼:
<template>
<div class="Home">
<h1>vuex購(gòu)物車(chē)案例</h1>
<add-from></add-from>
<shop-cart></shop-cart>
</div>
</template>
<script>
import AddFrom from './Add.vue'
import ShopCart from './ShopCart.vue'
// @ is an alias to /src
// import HelloWorld from '@/components/HelloWorld.vue'
export default {
name: 'Home',
components: {
AddFrom,
ShopCart
},
};
</script>
<style>
table {
width: 800px;
margin: 0 auto;
border: 1px solid #ccc;
border-spacing: 0;
}
tbody th,
tbody td {
border: 1px solid #ccc;
text-align: center;
}
h1{
text-align: center;
}
.add{
width: 800px;
margin: 0 auto;
}
</style>
父組件
<template>
<div class="add">
<div class="from-group">
<label for="">商品編號(hào)</label>
<input type="text" v-model="shop.id" placeholder="請(qǐng)輸入商品編號(hào)">
</div>
<div class="from-group">
<label for="">商品名稱(chēng)</label>
<input type="text" v-model="shop.name" placeholder="請(qǐng)輸入商品名稱(chēng)">
</div>
<div class="from-group">
<label for="">商品價(jià)格</label>
<input type="text" v-model="shop.price" placeholder="請(qǐng)輸入商品價(jià)格">
</div>
<div class="from-group">
<label for="">商品數(shù)量</label>
<input type="text" v-model="shop.count" placeholder="請(qǐng)輸入商品數(shù)量">
</div>
<div class="from-group">
<button @click="add">添加商品</button>
</div>
</div>
</template>
<script>
export default {
name: 'add',
data() {
return {
shop:{}
};
},
methods:{
add(){
this.$store.dispatch("addShopList",this.shop)
this.shop = {
id:"",
name:"",
price:"",
count:""
}
}
}
};
</script>
<style scoped>
.add{
width: 800px;
text-align: center;
}
</style>
```bash
<template>
<div class="Shop-Cart">
<table>
<thead border>
<tr>
<th>商品編號(hào)</th>
<th>商品名稱(chēng)</th>
<th>商品價(jià)格</th>
<th>商品數(shù)量</th>
<th>小計(jì)</th>
<th>操作</th>
</tr>
</thead>
<tbody v-if="shop.length > 0">
<tr v-for="(i, e) in shop" :key="e">
<td>{{ i.id }}</td>
<td>{{ i.name }}</td>
<td>{{ i.price }}</td>
<td>
<button @click="add(e)">+</button>
<input type="text" v-model="i.count" />
<button @click="delet(e)">-</button>
</td>
<td>¥{{ i.price * i.count }}</td>
<td><button @click="del(e)">刪除</button></td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="6" align="right">總計(jì):{{ total }}</td>
<button @click="clear">清除購(gòu)物車(chē)</button>
</tr>
</tfoot>
</table>
</div>
</template>
<script>
export default {
name: 'Shop-Cart',
components: {},
data() {
return {};
},
computed: {
shop() {
return this.$store.getters.getlist;
},
total() {
return this.$store.getters.getShopTotal;
}
},
methods: {
del(e) {
// this.$store.dispatch()
this.$store.dispatch('remoteList', e);
},
add(e) {
this.$store.dispatch('addList', e);
},
delet(e) {
this.$store.dispatch('deleteList', e);
},
clear() {
this.$store.dispatch('clearList', []);
}
}
};
</script>
vuex組件
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
list: [{
id: 1,
name: "哇哈哈",
price: 3,
count: 0
},
{
id: 2,
name: "哇哈",
price: 3,
count: 0
}
]
},
getters: {
//獲取購(gòu)物車(chē)數(shù)據(jù)
getlist(state) {
return state.list
},
//商品的總價(jià)
getShopTotal(state,index) {
let result = 0;
state.list.forEach((item, index) => {
result += item.price * item.count
})
return result
},
},
mutations: {
//刪除購(gòu)物車(chē)單個(gè)數(shù)據(jù)
remoteList(state,index) {
state.list.splice(index, 1);
console.log("aaa",state)
},
//商品數(shù)量增加
addList(state, index) {
state.list[index].count++;
},
//商品數(shù)量減少
deleteList(state, index) {
state.list[index].count--;
if(state.list[index].count<=0){
state.list[index].count = 0
return ;
}
},
//清除購(gòu)物車(chē)
clearList(state, arr) {
state.list = arr
},
addShopList(state,shop){
state.list.push(shop)
}
},
//使用actions調(diào)用mutations方法
actions: {
remoteList({
commit
}, index) {
commit("remoteList", index)
},
addList({
commit
}, index) {
commit("addList", index)
},
deleteList({
commit
}, index) {
commit("deleteList", index)
},
clearList({
commit
}, arr) {
commit("clearList", arr)
},
addShopList({commit},shop){
commit("addShopList",shop)
}
},
modules: {}
})
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- Vuex實(shí)現(xiàn)簡(jiǎn)單購(gòu)物車(chē)
- Vuex實(shí)現(xiàn)購(gòu)物車(chē)小功能
- vuex實(shí)現(xiàn)購(gòu)物車(chē)的增加減少移除
- vuex實(shí)現(xiàn)購(gòu)物車(chē)功能
- 使用vuex較為優(yōu)雅的實(shí)現(xiàn)一個(gè)購(gòu)物車(chē)功能的示例代碼
- vuex實(shí)現(xiàn)的簡(jiǎn)單購(gòu)物車(chē)功能示例
- 用vuex寫(xiě)了一個(gè)購(gòu)物車(chē)H5頁(yè)面的示例代碼
- vuex實(shí)現(xiàn)簡(jiǎn)單的購(gòu)物車(chē)功能
相關(guān)文章
vue 開(kāi)發(fā)一個(gè)按鈕組件的示例代碼
本篇文章主要介紹了vue 開(kāi)發(fā)一個(gè)按鈕組件的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
vue-cli構(gòu)建vue項(xiàng)目的步驟詳解
這篇文章主要介紹了vue-cli構(gòu)建vue項(xiàng)目的步驟詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Vue綁定class和綁定內(nèi)聯(lián)樣式的實(shí)現(xiàn)方法
本文主要介紹了Vue綁定class和綁定內(nèi)聯(lián)樣式的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
vue 實(shí)現(xiàn)強(qiáng)制類(lèi)型轉(zhuǎn)換 數(shù)字類(lèi)型轉(zhuǎn)為字符串
今天小編就為大家分享一篇vue 實(shí)現(xiàn)強(qiáng)制類(lèi)型轉(zhuǎn)換 數(shù)字類(lèi)型轉(zhuǎn)為字符串,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11

