072——VUE中vuex之使用mutations修改购物车仓库数据

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>vuex之使用mutations修改购物车仓库数据</title>
    <script src="vue.js"></script>
    <script src="vuex.js"></script>
</head>
<body>
<div >
    <footer-cart></footer-cart>
    <Lists></Lists>

</div>
<script type="text/x-template" >
    <div>
        <h1 v-if="goods.length==0">
            购物车中没有商品
            <a href="">去购物吧</a>
        </h1>
        <div v-if="goods.length>0">
            <table >
                <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" >
    <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>