<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vuex之使用actions和axios异步初始购物车数据</title>
    <script src="vue.js"></script>
    <script src="vuex.js"></script>
    <script src="node_modules/axios/dist/axios.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: []
        },
        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);
            },
            setGoods(state, param) {
                state.goods = param.goods;
            }
        },
        actions: {
            loadGoods(store) {
                axios.get('073.php').then(function (response) {
                    store.commit('setGoods', {goods: response.data})
                    //console.log(response);
                })
            }
        }
    });
    var app = new Vue({
        el: "#demo",
        store,
        components: {
            Lists, footerCart
        },
        mounted() {
            this.$store.dispatch('loadGoods');
        }
    });
</script>
</body>
</html>

  073.php代码:

<?php
$data = [
    ['id' => 1, 'title' => 'ihpone7', 'price' => 100, 'num' => 3],
    ['id' => 2, 'title' => 'ihpone8', 'price' => 200, 'num' => 4],
];
echo json_encode($data);
?>