<NuxtLink>
<NuxtLink> — это встроенная замена как компонента Vue Router <RouterLink>, так и HTML-тега <a>. Он умно определяет, является ли ссылка внутренней или внешней, и рендерит её соответствующим образом с помощью доступных оптимизаций (предзагрузка, атрибуты по умолчанию и т. д.).Внутренний роутинг
В этом примере мы используем компонент <NuxtLink> для перехода на другую страницу приложения.
<template>
<NuxtLink to="/about">О нас</NuxtLink>
</template>
<!-- (Vue Router и умная предзагрузка) -->
<a href="/about">О нас</a>
Передача параметров динамическим маршрутам
В этом примере мы передаем параметр id для ссылки на маршрут ~/pages/posts/[id].vue.
<template>
<NuxtLink :to="{ name: 'posts-id', params: { id: 123 } }">
Пост 123
</NuxtLink>
</template>
<a href="/posts/123">Пост 123</a>
to передаётся объект, <NuxtLink> наследует обработку query-параметров от Vue Router. Ключи и значения кодируются автоматически, вызывать encodeURI или encodeURIComponent вручную не нужно.Статические файлы и ссылки между приложениями
По умолчанию <NuxtLink> использует клиентскую навигацию Vue Router для относительных маршрутов. Ссылки на статические файлы в каталоге /public или на другое приложение на том же домене могут привести к неожиданным 404: они не входят в клиентские маршруты. В таких случаях используйте проп external у <NuxtLink>, чтобы обойти внутренний механизм маршрутизации Vue Router.
Проп external явно помечает ссылку как внешнюю. <NuxtLink> отрендерит её как обычный HTML-тег <a>, минуя логику Vue Router и указывая напрямую на ресурс.
Ссылки на статические файлы
Для файлов в /public (PDF, изображения и т.п.) укажите external, чтобы ссылка разрешалась корректно.
<template>
<NuxtLink
to="/example-report.pdf"
external
>
Скачать отчёт
</NuxtLink>
</template>
Ссылка на другое приложение
При указании на другое приложение на том же домене проп external обеспечивает ожидаемое поведение.
<template>
<NuxtLink
to="/another-app"
external
>
Другое приложение
</NuxtLink>
</template>
Использование external или корректная автоматическая обработка даёт предсказуемую навигацию, снижает риск сбоев маршрутизации и улучшает работу со статикой и сценариями «несколько приложений на одном домене».
Внешний роутинг
В этом примере мы используем компонент <NuxtLink> для перехода по ссылке на веб-сайт.
<template>
<NuxtLink to="https://nuxtjs.org">
Сайт Nuxt
</NuxtLink>
<!-- <a href="https://nuxtjs.org" rel="noopener noreferrer">...</a> -->
</template>
Атрибуты rel и noRel
Атрибут rel со значением noopener noreferrer по умолчанию добавляется к ссылкам с атрибутом target и к абсолютным ссылкам (например, начинающимся с http://, https:// или //).
noopenerустраняет ошибку безопасности в старых браузерах.noreferrerулучшает конфиденциальность для ваших пользователей, не отправляя заголовокRefererна сайт, на который дана ссылка.
Эти значения по умолчанию не оказывают негативного влияния на SEO и считаются лучшей практикой.
Когда вам нужно перезаписать это поведение, вы можете использовать входные параметры rel или noRel.
<template>
<NuxtLink to="https://twitter.com/nuxt_js">
Nuxt в X
</NuxtLink>
<!-- <a href="https://twitter.com/nuxt_js" rel="noopener noreferrer">...</a> -->
<NuxtLink
to="https://discord.nuxtjs.org"
rel="noopener"
>
Discord Nuxt
</NuxtLink>
<!-- <a href="https://discord.nuxtjs.org" rel="noopener">...</a> -->
<NuxtLink
to="/about"
target="_blank"
>О нас</NuxtLink>
<!-- <a href="/about" target="_blank" rel="noopener noreferrer">...</a> -->
</template>
Проп noRel отключает добавление значения rel по умолчанию для абсолютных ссылок.
<template>
<NuxtLink
to="https://github.com/nuxt"
no-rel
>
Nuxt на GitHub
</NuxtLink>
<!-- <a href="https://github.com/nuxt">...</a> -->
</template>
noRel и rel: в этом случае rel будет проигнорирован.Предзагрузка ссылок
В Nuxt включена умная предзагрузка: по умолчанию определяется видимость ссылки (в области просмотра или при прокрутке), и JavaScript для соответствующих страниц подгружается заранее, чтобы к клику всё было готово. Ресурсы загружаются, когда браузер не перегружен; предзагрузка пропускается при офлайне или соединении уровня 2G.
<NuxtLink to="/about" no-prefetch>
О нас (без предзагрузки)
</NuxtLink>
<NuxtLink to="/about" :prefetch="false">
О нас (без предзагрузки)
</NuxtLink>
Пользовательские триггеры предзагрузки
Начиная с v3.13.0 для <NuxtLink> можно задавать триггеры предзагрузки через проп prefetchOn.
<template>
<NuxtLink prefetch-on="visibility">
Предзагрузка при появлении в области просмотра (по умолчанию)
</NuxtLink>
<NuxtLink prefetch-on="interaction">
Предзагрузка при наведении или фокусе
</NuxtLink>
</template>
visibility: предзагрузка, когда ссылка попадает в область просмотра. Используется Intersection Observer API; срабатывает при прокрутке элемента в видимую зону.interaction: предзагрузка при наведении или фокусе. Обрабатываются событияpointerenterиfocus, чтобы заранее подгрузить ресурсы, когда пользователь явно проявляет намерение перейти.
Также можно передать объект в prefetchOn:
<template>
<NuxtLink :prefetch-on="{ interaction: true }">
Предзагрузка при наведении или фокусе
</NuxtLink>
</template>
Обычно не стоит включать оба варианта сразу:
<template>
<NuxtLink :prefetch-on="{ visibility: true, interaction: true }">
Предзагрузка и при наведении/фокусе, и при появлении в области просмотра
</NuxtLink>
</template>
Такая конфигурация одновременно отслеживает появление ссылки в области просмотра и слушает pointerenter и focus, что может лишний раз тратить ресурсы: оба триггера могут предзагружать один и тот же ресурс в разных условиях.
Кросс-доменная предзагрузка
Чтобы включить предзагрузку с других источников, задайте в nuxt.config опцию crossOriginPrefetch. Будет использоваться Speculation Rules API.
export default defineNuxtConfig({
experimental: {
crossOriginPrefetch: true,
},
})
Отключить предзагрузку глобально
Предзагрузку для всех ссылок приложения можно включить или выключить в конфигурации.
export default defineNuxtConfig({
experimental: {
defaults: {
nuxtLink: {
prefetch: false,
},
},
},
})
Входные параметры
Параметры, как у RouterLink
Если не используется external, <NuxtLink> поддерживает все входные параметры RouterLink из Vue Router
to: любой URL или объект местоположения маршрута из Vue Routercustom: оборачивать ли содержимое в<a>. Даёт полный контроль над разметкой ссылки и навигацией по клику; ведёт себя как пропcustomу Vue RouterexactActiveClass: класс для точно активных ссылок; как пропexactActiveClassу Vue Router для внутренних ссылок. По умолчанию"router-link-exact-active"activeClass: класс для активных ссылок; как пропactiveClass. По умолчанию"router-link-active"replace: как пропreplaceу Vue Router для внутренних ссылокariaCurrentValue: значениеaria-currentдля точно активных ссылок; как пропariaCurrentValueу Vue Router
Дополнительные параметры NuxtLink
href: Алиас дляto. При использованииto,hrefбудет проигнорированnoRel: Если установлено вtrue, атрибутrelне будет добавлен к внешней ссылкеexternal: Заставляет ссылку рендериться как тегaвместоRouterLinkу Vue Router.prefetch: при включении Nuxt предзагружает для ссылок в области просмотра код посредников маршрута и лейаутов; при включённомexperimental.payloadExtraction— также данные полезной нагрузки. Кросс-доменная предзагрузка настраивается черезexperimental.crossOriginPrefetch.prefetchOn: когда предзагружать ссылки —interactionилиvisibility(по умолчанию). Можно передать объект, например{ interaction: true, visibility: true }. Учитывается только при включённой предзагрузке (prefetchпо умолчанию) и безnoPrefetch.noPrefetch: Отключает предварительную загрузку.prefetchedClass: Класс, применяемый к ссылкам, которые были предварительно загружены.
Якорь
target: Значение атрибутаtarget, применяемое к ссылке.rel: Значение атрибутаrel, применяемое к ссылке. По умолчанию для внешних ссылок используется"noopener noreferrer".
Перезапись значений по умолчанию
В файле nuxt.config
Вы можете перезаписать некоторые значения по умолчанию для <NuxtLink> в вашем nuxt.config
app.config или в директорию app/.export default defineNuxtConfig({
experimental: {
defaults: {
nuxtLink: {
// значения по умолчанию для NuxtLink
componentName: 'NuxtLink',
externalRelAttribute: 'noopener noreferrer',
activeClass: 'router-link-active',
exactActiveClass: 'router-link-exact-active',
prefetchedClass: undefined, // любое допустимое имя CSS-класса
trailingSlash: undefined, // 'append' | 'remove' | не задано
prefetch: true,
prefetchOn: { visibility: true },
},
},
},
})
Пользовательский компонент ссылки
Вы можете перезаписать значения по умолчанию <NuxtLink>, создав свой собственный компонент ссылок с помощью defineNuxtLink.
export default defineNuxtLink({
componentName: 'MyNuxtLink',
/* подробнее смотрите в сигнатуре ниже */
})
Затем вы можете использовать компонент <MyNuxtLink /> как обычно с вашими новыми настройками по умолчанию.
Сигнатура defineNuxtLink
interface NuxtLinkOptions {
componentName?: string
externalRelAttribute?: string
activeClass?: string
exactActiveClass?: string
trailingSlash?: 'append' | 'remove'
prefetch?: boolean
prefetchedClass?: string
prefetchOn?: Partial<{
visibility: boolean
interaction: boolean
}>
}
function defineNuxtLink (options: NuxtLinkOptions): Component {}
componentName: Имя компонента. По умолчанию используетсяNuxtLink.externalRelAttribute: Значение атрибутаrelпо умолчанию, применяемое к внешним ссылкам. По умолчанию используется"noopener noreferrer". Установите значение"", чтобы отключитьactiveClass: Класс по умолчанию, применяемый к активным ссылкам. Работает так же, как и параметрlinkActiveClassу Vue Router. По умолчанию используется значение по умолчанию от Vue Router ("router-link-active")exactActiveClass: Класс по умолчанию, применяемый к точным активным ссылкам. Работает так же, как и параметрlinkExactActiveClassу Vue Router. По умолчанию используется значение по умолчанию от Vue Router ("router-link-exact-active")trailingSlash: Возможность добавлять или удалять слэши в конце вhref. Если значение не задано или не соответствует допустимым значениямappendилиremove, оно будет проигнорировано.prefetch: включать ли предзагрузку ссылок по умолчанию.prefetchOn: детальный выбор стратегий предзагрузки по умолчанию.prefetchedClass: класс по умолчанию для уже предзагруженных ссылок.