创建自定义事件

Nuxt 提供了一个由 hookable 驱动的强大事件系统。

使用事件是解耦应用程序并允许代码不同部分之间进行更灵活和模块化通信的好方法。事件可以有多个不相互依赖的监听器。例如,您可能希望在每次订单发货时向用户发送电子邮件。与其将订单处理代码与电子邮件代码耦合,不如发出一个事件,监听器可以接收该事件并用于发送电子邮件。

Nuxt 事件系统由 unjs/hookable 提供支持,这也是为 Nuxt 钩子系统提供支持的同一库。

创建事件和监听器

您可以使用 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 对象来启用发射器和监听器之间的双向通信。由于 payload 通过引用传递,监听器可以修改它以将数据发送回发射器。

const nuxtApp = useNuxtApp()

nuxtApp.hook('app:user:registered', (payload) => {
  payload.message = '欢迎来到我们的应用程序!'
})

const payload = {
  id: 1,
  name: 'John Doe',
}

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

// payload.message 将是 '欢迎来到我们的应用程序!'
您可以使用 Nuxt DevTools 的 Hooks 面板检查所有事件。
了解有关 Nuxt 内置钩子的更多信息以及如何扩展它们