I highly recommend utilizing Vuex for managing the state of your entire application. By doing so, you centralize all your state in one place, rather than having it scattered across multiple locations. Employing an event bus can complicate matters as it introduces another layer of state management that can be harder to maintain and goes against the principle of a "one way data flow" advocated by Vue and Vuex (as well as other Flux implementations).
Vuex can effectively handle both the application state and application data. Application data refers to things like customer details, while application state involves elements such as whether a sidebar menu is open, if a modal window is displayed, or what item a user has selected from a list.
This brings us to the point about using Vuex primarily for app-wide communication rather than for interactions between adjacent components. In reality, these scenarios are not so different.
When a parent component needs to communicate with a child component, it can simply pass down props. If the child component requires a more detached form of communication, it can emit events – which is perfectly acceptable in that context.
Now, picture a situation where there are multiple nested components, say A communicating with B, then B with C, and finally C with D. Consider the complexity involved if D wishes to update some state in B; continuously emitting events upwards creates unnecessary coupling among components. Instead, D should dispatch a Vuex action which will update B through the store binding. The same principle applies when A needs to modify something in C; making B solely responsible for facilitating communication between A and C through additional props is inelegant. Again, employing a Vuex action streamlines this process.
The beauty of Vuex lies in its ability to facilitate communication between sibling components or even disparate components located in various parts of the page – essentially for handling application state seamlessly.
Embracing this approach and eliminating the use of an event bus will undoubtedly simplify and enhance the maintainability of your codebase.