在uniapp中,班级页面选中的班级数据存在store里,是否要独立一个module,给个例子
时间: 2024-03-06 14:48:50 浏览: 70
解决vue刷新页面以后丢失store的数据问题
5星 · 资源好评率100%
是的,在实际开发中,我们通常会将不同模块的数据分别放在不同的模块中,这样可以方便地管理和维护。对于班级数据来说,我们可以创建一个名为 `class` 的模块,用于存储班级相关的数据和状态。
下面是一个示例代码:
```javascript
// store/modules/class.js
const state = {
selectedClass: null, // 选中的班级数据
classList: [ // 班级数据数组
{ id: 1, name: 'Class A' },
{ id: 2, name: 'Class B' },
{ id: 3, name: 'Class C' },
]
}
const mutations = {
setSelectedClass(state, classData) {
state.selectedClass = classData
}
}
const actions = {
selectClass({ commit }, classData) {
commit('setSelectedClass', classData)
}
}
const getters = {
getClassList(state) {
return state.classList
},
getSelectedClass(state) {
return state.selectedClass
}
}
export default {
state,
mutations,
actions,
getters
}
```
然后在 `store/index.js` 中引入并注册 `class` 模块:
```javascript
// store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
import classModule from './modules/class'
Vue.use(Vuex)
export default new Vuex.Store({
modules: {
class: classModule
}
})
```
这样,我们就可以通过 `mapActions`、`mapGetters` 辅助函数来访问 `class` 模块中的数据了。例如:
```vue
<template>
<div>
<h2>班级列表</h2>
<ul>
<li v-for="classItem in classList" :key="classItem.id">
<span>{{ classItem.name }}</span>
<button @click="selectClass(classItem)">选择</button>
</li>
</ul>
<h2>选中的班级</h2>
<div v-if="selectedClass">
<span>{{ selectedClass.name }}</span>
</div>
</div>
</template>
<script>
import { mapActions, mapGetters } from 'vuex'
export default {
computed: {
...mapGetters('class', ['getClassList', 'getSelectedClass']),
classList() {
return this.getClassList
},
selectedClass() {
return this.getSelectedClass
}
},
methods: {
...mapActions('class', ['selectClass']),
}
}
</script>
```
在模板中,我们通过 `mapGetters` 辅助函数获取 `classList` 和 `selectedClass` 数据,通过 `mapActions` 辅助函数触发 `selectClass` action 来更新 `selectedClass` 数据。需要注意的是,在 `mapGetters` 和 `mapActions` 中需要指定模块名称,以便正确访问 `class` 模块中的数据和方法。
阅读全文