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 @@
+
Index Module
About
+
+
Todo Module
Todos
+
+
+
Nested Modules
+
Website
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 @@
+
+
+
Articles
+
+
Comments (nested under articles)
+
+
Home
+
+
+
+
+
+
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)
}