Javascript 聆听vuex模块中的操作/变化
我有一个带有多个模块的vuex存储,我希望能够从模块中侦听“全局”Javascript 聆听vuex模块中的操作/变化,javascript,vue.js,vuex,vuex-modules,Javascript,Vue.js,Vuex,Vuex Modules,我有一个带有多个模块的vuex存储,我希望能够从模块中侦听“全局”dispatch或commit调用(也称动作和突变)。例如,在auth模块中,有登录和注销等操作。每当分派这些操作时,我希望另一个模块ui也执行一些操作,比如根据登录用户设置语言 我知道我可以在auth模块中的登录和注销操作中调度ui操作。但是我更愿意让它反过来,这样ui就可以监听auth中调度的事件(动作和/或突变)。这样,我可以轻松创建副作用,而无需更改“原始”vuex模块 也许我需要使用手表,但有些动作不会改变状态,所以我不
dispatch
或commit
调用(也称动作和突变)。例如,在auth
模块中,有登录和注销等操作。每当分派这些操作时,我希望另一个模块ui
也执行一些操作,比如根据登录用户设置语言
我知道我可以在auth
模块中的登录和注销操作中调度ui
操作。但是我更愿意让它反过来,这样ui
就可以监听auth
中调度的事件(动作和/或突变)。这样,我可以轻松创建副作用,而无需更改“原始”vuex模块
也许我需要使用手表,但有些动作不会改变状态,所以我不能一直使用它们。创建插件也是一种选择,但我不想每次创建这样的副作用时都创建一个额外的插件
所以我的问题,;在vuex模块中,我如何监听其他模块发送的操作/变化?我为自己创建了一个vuex插件,它可以触发所有存储中的所有刷新操作。但是你可以做任何我称之为刷新的事情 插件:
const onModuleAValueChange= (store) => {
store.watch(
state => state.moduleA.value,
(val, oldVal) => {
// Don't do anything on init state
if (!oldVal) return;
// This will trigger all refresh actions on all store. But you can add anything here
// Essentially does:
// store.dispatch(`moduleA/refresh`);
// store.dispatch(`moduleB/refresh`);
// store.dispatch(`moduleC/refresh`);
for (let state in store.state) {
const action = `${state}/refresh`;
// If the store does not have an refresh action ignore
if (store._actions[action]) store.dispatch(`${state}/refresh`);
}
// Additional action
store.dispatch(`moduleC/moduleC_Action`);
}
);
};
存储核心:
export const store = new Vuex.Store({
modules: {
moduleA,
moduleB,
moduleC
},
plugins: [onModuleAValueChange]
});
也许你可以在模块内订阅的可能的副本,但KS还没有找到,但它建议使用插件。我想知道是否有其他方法可以收听(或订阅)模块中的操作我认为插件可以为您解决问题使用它作为插件是可选的。可以在创建存储实例后在其上注册。不可能从模块内侦听,因为模块被编译到单个存储实例中。