<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vuex之使用mutations修改购物车仓库数据</title> <script src="vue.js"></script> <script src="vuex.js"></script> </head> <body> <div id="demo"> <footer-cart></footer-cart> <Lists></Lists> </div> <script type="text/x-template" id="Lists"> <div> <h1 v-if="goods.length==0"> 购物车中没有商品 <a href="">去购物吧</a> </h1> <div v-if="goods.length>0"> <table border="1"> <tr> <th>编号</th> <th>名称</th> <th>价格</th> <th>数量</th> <th>总计</th> <th>操作</th> </tr> <tr v-for="v in goods"> <td>{{v.id}}</td> <td>{{v.title}}</td> <td>{{v.price}}</td> <td> <input type="text" v-model="v.num"> </td> <td>{{v.totalPrice}}</td> <td> <button @click="del(v.id)">删除</button> </td> </tr> </table> </div> </div> </script> <script type="text/x-template" id="footerCart"> <div v-if="totalPrice>0"> <div> 总计:{{totalPrice}} </div> </div> </script> <script> let Lists = { template: "#Lists", computed: { goods() { return this.$store.getters.goods; } }, methods: { del(id) { this.$store.commit('del', {id}) } } } let footerCart = { template: "#footerCart", computed: { totalPrice() { return this.$store.getters.totalPrice; } } } let store = new Vuex.Store({ state: { goods: [ {id: 1, title: 'ihpone7', price: 100, num: 3}, {id: 2, title: 'vivo20', price: 100, num: 2} ] }, getters: { //获取商品总价: totalPrice: state => { let totalPrice = 0; state.goods.forEach((v) => { totalPrice += v.num * v.price; }); return totalPrice; }, goods(state) { let goods = state.goods; goods.forEach((v) => { v.totalPrice = v.num * v.price; }) return goods; } }, mutations: { //删除购物车中的商品 del(state, param) { let k; for (let i = 0; i < state.goods.length; i++) { if (state.goods[i].id == param.id) { k = i; break; } } state.goods.splice(k, 1); } } }); var app = new Vue({ el: "#demo", store, components: { Lists, footerCart } }); </script> </body> </html>