SoFunction
Updated on 2025-04-14

Problems and interpretation of Vue event bus usage

Issues using Vue event bus

In front-end development, communication between components is an important topic.

Especially in large-scale applications, how to efficiently realize information transmission between components has a crucial impact on the robustness and maintainability of the application.

There are many ways to realize communication between components, such as communication between parent-child components through props and events, and global state management through Vuex. However, in some scenarios, we may need a more flexible way, which is the Event Bus.

What is an event bus?

Event Bus is a central event management tool that allows us to publish and subscribe events between different Vue components.

It is usually a simple Vue instance, throughvueExample$emitand$onMethods We can easily implement the listening and triggering of events.

How to implement event bus?

Here is a simple example of implementing an event bus:

// 
import Vue from 'vue';
export const EventBus = new Vue();

In this file, we create a new Vue instance namedEventBus

In your Vue component, you can import this event bus and listen and trigger events.

Example of using event bus

Suppose we have two components:ComponentAandComponentB

We hope to beComponentAAfter an operation in theComponentB

<template>
  <div>
    <button @click="sendMessage">Send a message</button>
  </div>
</template>

<script>
import { EventBus } from './';

export default {
  methods: {
    sendMessage() {
      EventBus.$emit('messageSent', 'Hello from ComponentA!');
    }
  }
}
</script>

Here, when we click the button, a name namedmessageSentnews.

<template>
  <div>
    <h2>Messages received:{{ message }}</h2>
  </div>
</template>

<script>
import { EventBus } from './';

export default {
  data() {
    return {
      message: ''
    };
  },
  created() {
    EventBus.$on('messageSent', (msg) => {
       = msg;
    });
  },
  beforeDestroy() {
    EventBus.$off('messageSent'); // When component is destroyed, event listening is canceled  }
}
</script>

existComponentBIn, we passcreatedLife cycle hook to monitormessageSentEvents, once the event is triggered, we update the message tomessagein variable.

Things to note when using event bus

Although the event bus provides great flexibility, we also need to pay attention to the following points during use:

  • Global event pollution: Event bus is global, and improper use may lead to increased coupling between events, making it difficult to track and debug. Try to avoid using the same event name in multiple components. If you need to trigger events multiple times, you can add a prefix to distinguish them.
  • Memory leak: If event listening is not removed in time when component is destroyed, memory leakage may occur. Must be inbeforeDestroyRemove event listening from the hook.
  • Applicable scenarios: Event bus is suitable for small or medium-sized applications, or local state management. In large applications, it is recommended to use Vuex for global state management to maintain predictability of state.

When to use event bus?

Event buses are ideal for the following scenarios:

  • When simple communication between multiple unrelated components is required.
  • When you don't want to use Vuex to manage state and only need a lightweight communication method.
  • When the communication of components is flexible and changeable, different events are needed under different circumstances.

in conclusion

Event bus is a simple and powerful mechanism that provides a lightweight solution for communication between components. It can provide convenient features whether in small projects or in certain specific scenarios. However, we also need to be cautious when using it to avoid confusion and unmaintainability of the code.

In large applications, gradually introducing state management tools such as Vuex will be a better choice as the complexity of the application increases. By rationally choosing the way of communication between components and maintaining the neatness and relative independence of the code will make it easier for us to deal with future changes in the project.

The above is personal experience. I hope you can give you a reference and I hope you can support me more.