В Vue 3, для передачи данных между не связанными друг с другом компонентами, можно использовать шаблон "event bus", который позволяет отправлять пользовательские события между компонентами. Event bus - это централизованный механизм для обмена данными между компонентами, без необходимости использования родительских и дочерних связей.
Для создания event bus'а в Vue 3, вы можете использовать новую функцию createApp
и метод provide/inject
. Первым шагом, вам нужно создать новый экземпляр Vue приложения с использованием createApp
, а затем воспользоваться методом provide
, чтобы создать глобальную переменную, которая будет доступна для всех компонентов:
import { createApp, inject } from 'vue' const app = createApp({}) app.provide('eventBus', app)
Теперь, вы можете использовать эту переменную eventBus
в любом компоненте для отправки и прослушивания событий. Для этого нужно воспользоваться методами emit
и on
:
import { inject } from 'vue' export default { mounted() { const eventBus = inject('eventBus') // Прослушивание события eventBus.on('eventName', this.handleEvent) // Отправка события eventBus.emit('eventName', data) }, methods: { handleEvent(data) { // Обработка события } } }
Когда компонент "A" нуждается в передачи данных компоненту "B", он просто отправляет событие с данными в event bus. Компонент "B", затем, прослушивает это событие и выполняет необходимые действия.
Теперь, вы можете передавать данные между не связанными компонентами в Vue 3, используя event bus на основе provide/inject
. Этот подход позволяет легко управлять обменом данными между компонентами без создания сложных родительских-дочерних связей.