<NuxtAnnouncer>

Source
Компонент <NuxtAnnouncer> добавляет скрытый элемент для озвучивания динамических изменений контента программам чтения с экрана.
Компонент доступен в Nuxt v3.17+.

Использование

Добавьте <NuxtAnnouncer/> в app.vue или app/layouts/, чтобы программы чтения с экрана могли озвучивать динамические изменения контента. Удобно для валидации форм, уведомлений, состояний загрузки и других обновлений на странице.

app/app.vue
<template>
  <NuxtAnnouncer />
  <NuxtRouteAnnouncer />
  <NuxtLayout>
    <NuxtPage />
  </NuxtLayout>
</template>

Затем используйте композабл useAnnouncer в любом месте приложения, чтобы озвучивать сообщения:

app/pages/contact.vue
<script setup lang="ts">
const { polite, assertive } = useAnnouncer()

async function submitForm () {
  try {
    await $fetch('/api/contact', { method: 'POST', body: formData })
    polite('Сообщение успешно отправлено')
  } catch (error) {
    assertive('Ошибка: не удалось отправить сообщение')
  }
}
</script>

Слоты

Через слот по умолчанию можно передать свой HTML или компоненты.

<template>
  <NuxtAnnouncer>
    <template #default="{ message }">
      <p>{{ message }}</p>
    </template>
  </NuxtAnnouncer>
</template>

Пропсы

  • atomic: управляет тем, озвучивать ли только изменения или весь контент. true — полное озвучивание при обновлении, false — только изменения. (по умолчанию true)
  • politeness: срочность озвучивания: off (отключить), polite (дождаться паузы), assertive (озвучить сразу). (по умолчанию polite)

Отличия от <NuxtRouteAnnouncer>

Аспект<NuxtRouteAnnouncer><NuxtAnnouncer>
НазначениеОзвучивает смену маршрута/страницыОзвучивает любой динамический контент
ТриггерАвтоматически при навигацииВручную через polite()/assertive()
Источник сообщения<title> страницыЗадаётся разработчиком
atomic по умолчаниюfalsetrue
Компонент опционален.
Для полной кастомизации можно реализовать свой на основе исходного кода.
Доступ к экземпляру озвучивания — через композабл useAnnouncer, с помощью которого можно задавать произвольные сообщения.