store中有屬性modulesvue
modules內部可包含多個module,module擁有本身的 state、mutation、action、getter、甚至是嵌套子模塊vuex
store中配置modules以下:異步
export default () => {
const store = new Vuex.Store({
state: defaultState,
mutations: defaultMutations,//同步操做
getters: defaultGetters,
actions: {//實現異步操做
incrementAsync(context, n) {
//setTimeout(context.commit('increment', n), 2000);
setTimeout(() => {
context.commit('increment', { num1: n })//這裏面num1必須在mutations中存在。
}, 1000)
}
},
modules: {
a: defaultModuleA
}
})
//hot update---------
if (module.hot) {
module.hot.accept([
'./state',
'./mutation',
'./getters',
'./modulea'
], () => {
const newState = require('./state').default
const newMutation = require('./mutation').default
const newGetters = require('./getters').default
const newModuleA = require('./modulea').default
store.hotUpdate({
state: newState,
mutations: newMutation,
getters: newGetters,
modules: {
a: newModuleA
},
})
})
}
return store
}
modulesa的代碼以下:ide
export default {
state: {
aaa: 2222222
},
getters: {
getaaa(state) {
return state.aaa + "ddd";
}
}
}
這樣就實現了store中modules中modulea的熱加載,測試是否熱加載成功,能夠在組件中這樣寫:測試
<p>moduleA.state.aaa:{{$store.state.a.aaa}}</p> <p>moduleA.state.getaaa:{{$store.getters.getaaa}}</p> <!-獲取modulea中getters的方法,固然還有其它獲取方法,看最後補充!! ->
這裏有一點須要注意的是:module中的state屬性也是不能夠熱加載的。ui
補充:module中getters在組件中其它獲取方式:spa
1、modulea中加入屬性namespaced;3d
2、組件中引入code