美文网首页
vuex的modules与辅助的实例

vuex的modules与辅助的实例

作者: 懒懒猫 | 来源:发表于2022-08-28 11:08 被阅读0次

store/index.js

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
import user from "@/store/modules/user.js"
import order from "@/store/modules/order.js"

const store = new Vuex.Store({
    modules: {
        user,
        order,
    }

})
export default store

user.js

export default {
    namespaced: true,
    state: {
        userMsg: 'user的信息',
        userList: [
            { "id": 1, "username": "Alice", age: 19 },
            { "id": 3, "username": "Amy", age: 30 },
            { "id": 7, "username": "Jack", age: 80 },
        ]
    },
    actions: {},
    mutations: {
        changeMsg(state, newMsg) {
            state.userMsg = newMsg
        }
    },
    getters: {
        getAge(state) {
            return state.userList.filter(item => item.age > 20)

        }

    }
}

order.js

export default {
    namespaced: true,
    state: {
        orderMsg: 'order的信息',
        orderList: []
    },
    actions: {
        order(ctx, type) {
            setTimeout(() => {
                let data = [{
                        "id": 1,
                        "proName": '小米'
                    },
                    {
                        "id": 2,
                        "proName": '红米'
                    }
                ]
                ctx.commit("newOrder", data)
            }, 1000)
        }
    },
    mutations: {
        changeMsg(state, newMsg) {
            state.orderMsg = newMsg
        },
        newOrder(state, data) {
            state.orderList = data
        }
    }

}

index.vue

<template>
  <div class="index">
    <p>user模块中的数据: {{ userMsg }}</p>
    <p><button @click="change">修改store中user模块的数据</button></p>
    <ul>
      <li v-for="(item, index) in getAge" :key="index">{{item}}</li>
    </ul>
    <hr />
  </div>
</template>

<script>
import { mapState, mapMutations, mapGetters } from "vuex";
export default {
  name: "index",
  computed: {
    ...mapState({
      userMsg: (state) => state.user.userMsg,
    }),
    ...mapGetters({ getAge: "user/getAge" }),
  },
  methods: {

    ...mapMutations(['user/changeMsg']),
    change() {
      this['user/changeMsg']("新用户数据");
    },
    
  },
};
</script>

<style>
</style>

Category.vue

<template>
  <div class="category">
     <p>order模块中的数据: {{ orderMsg }}</p>
    <p><button @click="change2">修改store中order模块的数据</button></p>
   <ul>
      <li v-for="(item, index) in orderList" :key="index">{{item}}</li>
    </ul>
  </div>
</template>

<script>
import { mapState, mapMutations, } from "vuex";
export default {
     name: "Category",
  created() {
      this.$store.dispatch("order/order",'phone')
  },
  computed: {
    ...mapState({
      orderMsg: (state) => state.order.orderMsg,
      orderList: (state) => state.order.orderList,
    }),

  },
  methods: {
    ...mapMutations(['order/changeMsg']),
     change2() {
      this['order/changeMsg']("新订单数据");
    },
  },
};
</script>

<style>
</style>

相关文章

网友评论

      本文标题:vuex的modules与辅助的实例

      本文链接:https://www.haomeiwen.com/subject/oqwtkltx.html