Собственные события

В Nuxt есть система событий на базе hookable.

События помогают развязать части приложения и организовать обмен между ними. У одного события может быть несколько независимых подписчиков. Например, при отправке заказа можно вызвать событие, а подписчик отправит письмо — код заказа не будет зависеть от кода почты.

Система событий Nuxt построена на unjs/hookable — той же библиотеке, что и система хуков.

Создание событий и подписчиков

Подписаться на своё событие можно через hook:

const nuxtApp = useNuxtApp()

nuxtApp.hook('app:user:registered', (payload) => {
  console.log('Новый пользователь зарегистрирован!', payload)
})

Чтобы вызвать событие и уведомить подписчиков, используйте callHook:

const nuxtApp = useNuxtApp()

await nuxtApp.callHook('app:user:registered', {
  id: 1,
  name: 'John Doe',
})

Payload передаётся по ссылке — подписчик может изменить его и вернуть данные инициатору (двусторонняя связь).

const nuxtApp = useNuxtApp()

nuxtApp.hook('app:user:registered', (payload) => {
  payload.message = 'Добро пожаловать!'
})

await nuxtApp.callHook('app:user:registered', {
  id: 1,
  name: 'John Doe',
})

// payload.message будет 'Добро пожаловать!'
Все события можно смотреть в панели Hooks в Nuxt DevTools.
Встроенные хуки Nuxt и их расширение