创建自定义事件

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

使用事件是解耦应用程序并实现代码各部分之间更灵活、模块化通信的绝佳方式。事件可以拥有多个彼此不依赖的监听器。例如,你可能希望在订单发货时向用户发送电子邮件。与其将订单处理代码与电子邮件代码耦合在一起,不如发出一个事件,让监听器接收并用于发送电子邮件。

Nuxt 事件系统由unjs/hookable提供支持,这也是驱动 Nuxt 钩子(hooks)系统的核心库。

创建事件和监听器

你可以使用 hook 方法创建自己的自定义事件

const nuxtApp = useNuxtApp()

nuxtApp.hook('app:user:registered', (payload) => {
  console.log('A new user has registered!', 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 = 'Welcome to our app!'
})

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

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

// payload.message will be 'Welcome to our app!'
你可以使用 Nuxt DevTools 的 Hooks 面板查看所有事件。
了解更多关于 Nuxt 内置钩子及其扩展方式的信息