【发布时间】:2022-01-30 06:45:41
【问题描述】:
我正在使用帮助文件来导入 VueX 模块:
const requireModule = require.context('.', false, /\.store\.js$/)
const modules = {}
requireModule.keys().forEach(filename => {
const moduleName = filename
.replace(/(\.\/|\.store\.js)/g, '')
.replace(/^\w/, c => c.toUpperCase())
modules[moduleName] = requireModule(filename).default || requireModule(filename)
})
export default modules
这存在于@/store/modules/index.js 并由@/store/index.js 导入:
import Vue from 'vue'
import Vuex from 'vuex'
import modules from './modules'
Vue.use(Vuex)
export default new Vuex.Store({
modules,
actions: {
reset({commit}) {
Object.keys(modules).forEach(moduleName => {
commit(`${moduleName}/RESET`);
})
}
}
})
导入到 Vue:@/main.js:
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
Vue.config.productionTip = false
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
适用于我所有的商店模块!每个都有命名空间:
const initialState = () => ({})
const state = initialState()
const mutations = {
RESET(state) {
const newState = initialState();
Object.keys(newState).forEach(key => {
state[key] = newState[key]
});
}
}
const getters = {}
const actions = {}
export default {
namespaced: true,
state,
getters,
actions,
mutations
}
现在,我正在尝试将包作为状态模块导入。我没有任何经验。这可能看起来很傻......但我不确定如何将命名空间启用注入到 @/store/modules/Auth.store.js 中的包导入中:
import AmazonCognitoVuexModule from 'amazon-cognito-vuex-module';
const cognito = new AmazonCognitoVuexModule({
region: process.env.VUE_APP_COGNITO_REGION,
userPoolId: process.env.VUE_APP_COGNITO_USERPOOL_ID,
clientId: process.env.VUE_APP_COGNITO_CLIENT_ID,
})
export default cognito
因此,当我尝试使用 $store.dispatch('Auth/...') 调用导入的商店模块的操作时,找不到它们...因为它们没有命名空间。我想命名这个模块“Auth”。我敢打赌我忽略了一些非常简单的事情。任何帮助表示赞赏。
【问题讨论】:
标签: javascript vue.js namespaces vuex