我在分派动作时收到错误消息:“未知的本地动作类型...”,该动作恰巧在其他模块中。在某些情况下,我调度的动作不存在。因此,我需要应用一个条件,该条件将检查此操作是否存在,并且仅在满足条件时才调度该操作。我该怎么办?
答案 0 :(得分:2)
我一直这样做。 @ Khasanov72在商店外部就可以使用它,但是如果要从另一个动作中分派一个动作,则可以做得更简单:
//From module action
if (this._actions['module/action']) {
dispatch('module/action', data)
}
答案 1 :(得分:0)
我唯一能想到的是,只有在使用vuex registerModule的情况下,动作才存在。
在这种情况下,您可以添加一个Boolean
属性,指示该模块是否已注册。因此,在您的组件中:
const myModule = () => import('module-path.js')
export default {
data: () => ({
isModuleRegistered: false
}),
created() {
myModule.then(module => {
this.isModuleRegistered = true
this.$store.registerModule('myModule', module)
this.$store.dispatch('myModule/someAction')
})
},
beforeDestroy () {
// If you want to unregister it when component gets destroyed
this.isModuleRegistered && this.$store.unregisterModule('myModule')
}
}
如果上面的代码片段不能回答您的问题或不符合您的需求:注册模块时,您必须设置一个布尔属性。然后检查该布尔值以查看该模块是否已注册。当模块取消注册时,还必须更改该布尔值。
注意,上面我已经懒加载了vuex模块。如果您要延迟加载,请阅读this awesome article了解更多信息
答案 2 :(得分:0)
我有同样的问题,这是我解决的方法:
const methodName = MODULE_NAME + "/" + ACTION_NAME
const actionExists = Object.keys(window.Store._actions).findIndex(key => key === methodName) !== -1
if (actionExists) {
console.log(methodName + ' exists!')
} else {
console.log(methodName + ' doesn\'t exists!')
}