是否可以在命名空间模块之间分派操作?
例如,我有 Vuex 模块“游戏板”和“通知”。每个都有命名空间。我想从通知模块中的游戏板模块调度一个动作。
我想我可以像这样在调度操作名称中使用模块名称:
// store/modules/gameboard.js
const actions = {
myaction ({dispatch}) {
...
dispatch('notification/triggerSelfDismissingNotifcation', {...})
}
}
// store/modules/notification.js
const actions = {
triggerSelfDismissingNotification (context, payload) {
...
}
}
但是当我尝试这样做时,我得到了一些错误,让我认为 Vuex 试图在我的游戏板模块中调度一个动作:
[vuex] 未知本地动作类型:notification/triggerSelfDismissingNotification,全局类型:gameboard/notification/triggerSelfDismissingNotification
有没有办法将动作从给定的 Vuex 模块分派到另一个模块,或者我需要在根 Vuex 实例中创建某种桥接器?
您只需要指定您是从根上下文调度的:
// from the gameboard.js vuex module
dispatch('notification/triggerSelfDismissingNotifcation', {...}, {root:true})
现在,当调度到达根时,它将具有通知模块的正确命名空间路径(相对于根实例)。
这是假设您在 Vuex 商店模块上设置 namespaced: true
。
dispatch('mobuleB/actionB', null, { root: true })
不定期副业成功案例分享
notification/trigger
中的一些约定,这不是很烦人,那么如果我想让它更通用一点,我做${NOTIF_TYPE_NAME}/${NOTIF_TRIGGER_ACTION}
,仍然需要斜线,甚至为此创建一个辅助函数,我觉得当我希望我的应用程序更加模块化时,我付出的比我得到的要多得多。这是我的意见this.dispatch
。它不需要{root: true}
。这是全球性的。{root: true}
。您的意思可能是分派到一个子模块,它确实(并且显然)不需要这个标志。