事件系统

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: '张三',
})

您还可以通过 payload 对象实现事件触发者与监听器之间的双向通信。由于 payload 是通过引用传递的,监听器可以修改它来向触发者返回数据。

const nuxtApp = useNuxtApp()

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

const payload = {
  id: 1,
  name: '张三',
}

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

// payload.message 现在会是 '欢迎使用我们的应用!'
您可以通过 Nuxt DevTools 的 Hooks 面板查看所有事件。
了解更多关于 Nuxt 内置钩子及如何扩展它们