模块化vuex怎么获取模块里面的值
时间: 2023-10-18 09:06:45 浏览: 92
在使用模块化的 Vuex 中,获取模块里面的值需要使用模块命名空间(module namespace)。
在定义模块时,可以通过 `namespaced: true` 开启模块命名空间,这样在获取模块内部的状态、getters、mutations、actions 时,就需要加上模块的命名空间。
举个例子,假设我们有一个 `user` 模块,其中定义了一个 `state`:
```javascript
// user.js
export default {
namespaced: true,
state: {
name: '小明',
age: 18
}
}
```
如果要在另一个模块中获取 `user` 模块的 `name` 值,可以这样写:
```javascript
// other.js
export default {
computed: {
userName() {
return this.$store.state.user.name
}
}
}
```
但是在使用模块命名空间后,就需要添加模块命名空间前缀:
```javascript
// user.js
export default {
namespaced: true,
state: {
name: '小明',
age: 18
}
}
// other.js
export default {
computed: {
userName() {
return this.$store.state.user.name // 错误,需要加上模块命名空间前缀
// return this.$store.state['user'].name // 正确的方式
}
}
}
```
如果需要在 getters、mutations、actions 中访问模块内部的状态和其他函数,也需要加上模块命名空间前缀,例如:
```javascript
// user.js
export default {
namespaced: true,
state: {
name: '小明',
age: 18
},
getters: {
getNameAndAge(state) {
return `${state.name} - ${state.age}`
}
},
mutations: {
setName(state, newName) {
state.name = newName
}
},
actions: {
changeName({ commit }, newName) {
commit('setName', newName)
}
}
}
// other.js
export default {
computed: {
nameAndAge() {
return this.$store.getters['user/getNameAndAge'] // 获取 user 模块的 getters
}
},
methods: {
changeName(newName) {
this.$store.commit('user/setName', newName) // 调用 user 模块的 mutation
this.$store.dispatch('user/changeName', newName) // 调用 user 模块的 action
}
}
}
```
以上就是在模块化 Vuex 中获取模块里面的值的方法。
阅读全文