2017-03-15 30 views
9

我习惯于使用全局事件总线来处理交叉组件方法。例如:我应该如何处理Vuex中的事件?

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

但是,我正在构建一个更大的项目,这需要全局状态管理。当然,我想使用Vuex。

虽然这种总线模式适用于Vuex,但它似乎是错误的。我已经看到Vuex推荐这个模式的替代品

有没有办法在Vuex组件中运行方法?我应该如何处理这个问题?

回答

12

Vuexevent bus是vuex管理应用程序中央状态的两个不同的事情,而事件总线用于在应用程序的不同组件之间进行通信。

您可以从组件执行vuex变体或动作,也可以从vuex的动作引发事件。

正如docs说:

动作类似的突变,不同之处在于:

  • 变异状态相反的,行为犯突变。
  • 动作可以包含任意的异步操作。

所以,你可以通过提高巴士从动作的事件,您可以从任何组件的方法操作。

+1

因此,同时使用总线和vuex是一个OK模式?似乎与文档中所说的内容相矛盾,但现在我会滚动它:)谢谢! –

+0

是的,在我看来,你可以一起使用,这取决于用例。一旦可以用Vuex代替事件总线的所有功能,但是对于一个简单的用例(两个组件之间的通信,另一个组件的触发方法等),您可以使用事件总线,而对于需要多个组件的一个变量的地方,所有修改它,你可以使用vuex。 – Saurabh

+0

@ Blue_Dragon360我在同一个问题上挣扎,然后我遇到这个帖子,基本上和Saurabh说的一样。 https://forum.vuejs.org/t/bus-vs-vuex/6679 –

相关问题