我习惯于使用全局事件总线来处理跨组件方法.例如:

var bus = new Vue();
...
//Component A
bus.$emit('DoSomethingInComponentB');
...
//Component B
bus.$on('DoSomethingInComponentB', function(){ this.doSomething() })

然而,我正在建设一个更大的项目,这需要全球国家管理.当然,我想使用Vuex.

虽然这种总线模式适用于Vuex,但它似乎是错误的.我看到Vuex被推荐为这种模式的replacement.

有没有办法在Vuex的组件中运行方法?我该怎么做?

推荐答案

Vuexevent bus是两种不同的东西,因为vuex管理应用程序的中心状态,而事件总线用于在应用程序的不同组件之间进行通信.

您可以从组件执行vuex或操作,也可以从vuex的操作引发事件.

正如docs人所说:

行为类似于Mutations ,区别在于:

  • 行为不是改变状态,而是改变状态.
  • 操作可以包含任意异步操作.

因此,您可以通过总线从操作引发事件,也可以从任何组件方法调用操作.

Vue.js相关问答推荐

使用 nuxt.js 组件自动导入对性能不利吗?

Webpack 导入的模块不是函数

带有参数的 Vuex 映射 Getter - 缓存?

VueJS:为什么在input事件处理程序中触发Input输入事件?

如何从特定索引呈现 v-for

如何在 Vue 中编译从外部 api 加载的模板

从组件的 内的组件调用方法

在下拉菜单上使用箭头键滚动

Vue @click 不适用于存在 href 的anchor锚标记

如何像 React 中的 {...props} 一样在 Vue 中解构 props?

错误:[vuex] 期望字符串作为类型,但发现未定义

Vue devServer 代理没有帮助,我仍然收到 CORS 错误

如何在 Vue 类组件中定义过滤器?

所有 vue props和数据都给出错误 Property属性在 type 上不存在,带有 typescript

如何从 vue-apollo 中访问 this.$route?

axios 拦截器响应未定义

未在实例上定义,但在渲染期间引用

vuejs 配置:使用全局变量?

Vue.js 的 $emit 和 $dispatch 有什么区别?

如何订阅store 模块