效果图
index.js文件
import Vue from "vue";
import Vuex from 'vuex'Vue.use(Vuex)export default new Vuex.Store({state: {shopsList: [{goodsName: "手机1", goodsAmount: 0, goodsPrice: 100, totalPrice: 0,id: 1,},{goodsName: "手机2", goodsAmount: 0, goodsPrice: 200, totalPrice: 0,id: 2,},{goodsName: "手机3", goodsAmount: 0, goodsPrice: 300, totalPrice: 0,id: 3,},{goodsName: "手机4", goodsAmount: 0, goodsPrice: 400, totalPrice: 0,id: 4,},],goodsNumber: 0},mutations: {addGoodsMutations(state, goods) {state.shopsList.forEach((item) => {if (item.id === goods.id) {item.goodsAmount++}})},reduceGoodsMutations(state, goods) {if (goods.goodsAmount === 0) {alert("商品已经不能再减啦")return}state.shopsList.forEach((item) => {if (item.id === goods.id) {item.goodsAmount--}})},totalMutations(state, goods) {state.shopsList.forEach((item) => {if (item.id === goods.id) {item.totalPrice = item.goodsAmount * item.goodsPrice}})},},actions: {addGoodsActions({commit}, item) {commit('addGoodsMutations', item)},reduceGoodsActions({commit}, item) {commit('reduceGoodsMutations', item)},totalAction({commit}, item) {commit('totalMutations', item)}},getters: {},modules: {}
})
页面
<template><div class="box"><div class="content" v-for="(item, index) in shopsList" :key="index"><div>名称:{{ item.goodsName }} 价钱:{{ item.goodsPrice }}购买数量:<el-button style="margin-right: 5px" @click="reduce(item)">-</el-button><span>{{ item.goodsAmount }}</span><el-button style="margin-left: 5px" @click="add(item)">+</el-button><span>总价钱:{{ item.totalPrice }}</span></div></div></div>
</template><script>
import { mapState, mapMutations, mapActions } from "vuex";
export default {mounted() {},data() {return {};},computed: {...mapState(["shopsList", "totalPrice", "goodsNumber"]),},methods: {...mapMutations(["addGoodsMutations", "reduceGoodsMutations"]),...mapActions(["addGoodsActions", "reduceGoodsActions", "totalAction"]),reduce(item) {this.reduceGoodsActions(item);this.totalAction(item);},add(item) {this.addGoodsActions(item);this.totalAction(item);},},
};
</script><style>
.box {width: 400px;height: 200px;border: 1px solid black;
}
.content {height: 50px;display: flex;justify-content: space-evenly;align-items: center;
}
</style>
先这样吧,后续将再完善