跳到主要内容

创建自定义事件

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 内置钩子以及如何扩展它们 :::