diff --git a/examples/vuex-store-modules/pages/index.vue b/examples/vuex-store-modules/pages/index.vue index 2a2a712d4d..99a2cd37a5 100644 --- a/examples/vuex-store-modules/pages/index.vue +++ b/examples/vuex-store-modules/pages/index.vue @@ -1,11 +1,18 @@ diff --git a/examples/vuex-store-modules/pages/website.vue b/examples/vuex-store-modules/pages/website.vue new file mode 100644 index 0000000000..e0fa75320c --- /dev/null +++ b/examples/vuex-store-modules/pages/website.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/examples/vuex-store-modules/store/articles.js b/examples/vuex-store-modules/store/articles.js new file mode 100644 index 0000000000..a0698ff850 --- /dev/null +++ b/examples/vuex-store-modules/store/articles.js @@ -0,0 +1,19 @@ +export const state = { + list: [ + 'Lorem ipsum', + 'dolor sit amet', + 'consetetur sadipscing elitr' + ] +} + +export const mutations = { + add (state, title) { + state.list.push(title) + } +} + +export const getters = { + get (state) { + return state.list + } +} diff --git a/examples/vuex-store-modules/store/articles/comments.js b/examples/vuex-store-modules/store/articles/comments.js new file mode 100644 index 0000000000..1cb5606bae --- /dev/null +++ b/examples/vuex-store-modules/store/articles/comments.js @@ -0,0 +1,19 @@ +export const state = { + list: [ + 'Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.', + 'Lorem ipsum dolor sit amet, consetetur sadipscing elit.', + 'Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.' + ] +} + +export const mutations = { + add (state, title) { + state.list.push(title) + } +} + +export const getters = { + get (state) { + return state.list + } +} diff --git a/lib/app/store.js b/lib/app/store.js index 218eeebebc..a030990d50 100644 --- a/lib/app/store.js +++ b/lib/app/store.js @@ -2,7 +2,7 @@ import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) -let files = require.context('~/store', false, /^\.\/.*\.js$/) +let files = require.context('~/store', true, /^\.\/.*\.js$/) let filenames = files.keys() function getModule (filename) { @@ -12,6 +12,18 @@ function getModule (filename) { : file } +function getModuleNamespace (storeData, namePath) { + if (namePath.length == 1) return storeData.modules + + let namespace = namePath.shift() + + storeData.modules[namespace] = storeData.modules[namespace] || {} + storeData.modules[namespace].namespaced = true + storeData.modules[namespace].modules = storeData.modules[namespace].modules || {} + + return getModuleNamespace(storeData.modules[namespace], namePath) +} + let store let storeData = {} @@ -31,8 +43,13 @@ if (store == null) { for (let filename of filenames) { let name = filename.replace(/^\.\//, '').replace(/\.js$/, '') if (name === 'index') continue - storeData.modules[name] = getModule(filename) - storeData.modules[name].namespaced = true + + let namePath = name.split(/\//) + let module = getModuleNamespace(storeData, namePath) + + name = namePath.pop() + module[name] = getModule(filename) + module[name].namespaced = true } store = new Vuex.Store(storeData) }