Vuex 模块化

模块化的简单应用

定义两个模块 user 和 setting

user中管理用户的状态 token

setting中管理 应用的名称 name

export default new Vuex.Store({
  modules: {
    user: {
      state: {
        token: '12345'
      }
    },
    setting: {
      state: {
        name: 'ww'
      }
    }
  }
})

定义一个child-w组件 , 分别显示用户的 token 和 应用名称name

<template>
  <div>
    <div>{{ $store.state.user.token }}</div>
    <div>{{ $store.state.setting.name }}</div>
  </div>
</template>

注意: 此时要获取子模块的状态 需要通过 $store.state.模块名称.属性名 来获取

 

模块化中的命名空间

默认情况下 模块内部的action , mutation 和 getter 是注册在全局命名空间的------这样使得多个模块能够对同一 mutation 或 action 做出响应

例如在子模块中添加方法修改state.token的值 那么也可以用this.$store.commit('方法')使用

但是 , 如果我们想要保证内部模块的高封闭性 , 我们可以采用namespaced来进行设置 可以理解为(给自己房间上一把锁 钥 匙在你手上 只有你可以通过这个钥匙(命名空间)进入房间获取其中数据)

    user: {
      //  值为true表示命名
      namespaced: true,
      state: {
        token: '12345'
      },
      mutations: {
        updateToken (state) {
          state.token = xxx
        }
      }
    }

方案一: 采用路径形式调用

  methods: {
    ...mapMutations(['user/updateToken']),
    updateToken () {
      // 采用路径模式
      this.$store.commit('user/updateToken')
    }
  },

方案二 辅助函数-带上模块的属性名路径

    <button @click="test"></button>

    test () {
    ...mapMutations(['user/updateToken']),
      this['user/updateToken']()
    }

方案三 createNamespacedHelpers 创建基于某个命名空间辅助函数

    <button @click="updateToken"></button>

import { mapGetters, createNamespacedHelpers } from 'vuex'
const { mapMutations } = createNamespacedHelpers('user')

  methods: {
    ...mapMutations(['updateToken'])
  },

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值