<NuxtLink>
<NuxtLink>
- это встроенная замена как компонента Vue Router <RouterLink>
, так и HTML-тега <a>
. Он умно определяет, является ли ссылка внутренней или внешней, и рендерит ее соответствующим образом с помощью доступных оптимизаций (предварительная загрузка, атрибуты по умолчанию и т.д.)Внутренний роутинг
В этом примере мы используем компонент <NuxtLink>
для перехода на другую страницу приложения.
<template>
<NuxtLink to="/about">
About page
</NuxtLink>
<!-- <a href="/about">...</a> (+Vue Router & предварительная загрузка) -->
</template>
Передача параметров динамическим маршрутам
В этом примере мы передаем параметр id
для ссылки на маршрут ~/pages/posts/[id].vue
.
<template>
<NuxtLink :to="{ name: 'posts-id', params: { id: 123 } }">
Post 123
</NuxtLink>
</template>
Обработка 404
При использовании <NuxtLink>
для файлов директории /public
или при указании на другое приложение в том же домене, вам следует использовать входной параметр external
.
Использование external
приводит к тому, что ссылка рендерится как тег a
вместо Vue Router RouterLink
.
<template>
<NuxtLink to="/the-important-report.pdf" external>
Download Report
</NuxtLink>
<!-- <a href="/the-important-report.pdf"></a> -->
</template>
Внешняя логика применяется по умолчанию при использовании абсолютных URL-адресов и при предоставлении входного параметра target
.
Внешний роутинг
В этом примере мы используем компонент <NuxtLink>
для перехода по ссылке на веб-сайт.
<template>
<NuxtLink to="https://nuxtjs.org">
Nuxt website
</NuxtLink>
<!-- <a href="https://nuxtjs.org" rel="noopener noreferrer">...</a> -->
</template>
Атрибуты target
и rel
Атрибут rel
с noopener noreferrer
применяется по умолчанию к абсолютным ссылкам и ссылкам, которые открываются в новых вкладках.
noopener
устраняет ошибку безопасности в старых браузерах.noreferrer
улучшает конфиденциальность для ваших пользователей, не отправляя заголовокReferer
на сайт, на который дана ссылка.
Эти значения по умолчанию не оказывают негативного влияния на SEO и считаются лучшей практикой.
Когда вам нужно перезаписать это поведение, вы можете использовать входные параметры rel
и noRel
.
<template>
<NuxtLink to="https://twitter.com/nuxt_js" target="_blank">
Nuxt Twitter
</NuxtLink>
<!-- <a href="https://twitter.com/nuxt_js" target="_blank" rel="noopener noreferrer">...</a> -->
<NuxtLink to="https://discord.nuxtjs.org" target="_blank" rel="noopener">
Nuxt Discord
</NuxtLink>
<!-- <a href="https://discord.nuxtjs.org" target="_blank" rel="noopener">...</a> -->
<NuxtLink to="https://github.com/nuxt" no-rel>
Nuxt GitHub
</NuxtLink>
<!-- <a href="https://github.com/nuxt">...</a> -->
<NuxtLink to="/contact" target="_blank">
Contact page opens in another tab
</NuxtLink>
<!-- <a href="/contact" target="_blank" rel="noopener noreferrer">...</a> -->
</template>
Входные параметры
RouterLink
Если не используется external
, <NuxtLink>
поддерживает все входные параметры RouterLink
от Vue Router
to
: Любой URL-адрес или объект расположения маршрута из Vue Routercustom
:<NuxtLink>
должен обернуть свое содержимое в элемент<a>
. Это позволяет полностью контролировать отображение ссылки и работу навигации при нажатии на нее. Работает так же, как и входной параметрcustom
у Vue RouterexactActiveClass
: Класс, который будет применяться к точным активным ссылкам. Работает так же, как и входной параметрexact-active-class
у Vue Router для внутренних ссылок. По умолчанию используется значение по умолчанию от Vue Router ("router-link-exact-active"
)replace
: Работает так же, как и входной параметрreplace
у Vue Router для внутренних ссылокariaCurrentValue
: Значение атрибутаaria-current
, которое будет применяться к конкретным активным ссылкам. Работает так же, как и входной параметрaria-current-value
у Vue Router для внутренних ссылокactiveClass
: Класс, применяемый к активным ссылкам. Работает так же, как и входной параметрactive-class
у Vue Router для внутренних ссылок. По умолчанию используется значение по умолчанию от Vue Router ("router-link-active"
)
NuxtLink
href
: Алиас дляto
. При использованииto
,href
будет проигнорированnoRel
: Если установлено вtrue
, атрибутrel
не будет добавлен к ссылкеexternal
: Заставляет ссылку рендериться как тегa
вместоRouterLink
у Vue Router.prefetch
: Когда включено, будет выполняться предварительная загрузка middleware, layouts и payloads (при использовании payloadExtraction) ссылок в области просмотра. Используется в экспериментальной конфигурации crossOriginPrefetch.prefetchOn
: Allows custom control of when to prefetch links. Possible options areinteraction
andvisibility
(default). You can also pass an object for full control, for example:{ interaction: true, visibility: true }
. This prop is only used whenprefetch
is enabled (default) andnoPrefetch
is not set.noPrefetch
: Отключает предварительную загрузку.prefetchedClass
: Класс, применяемый к ссылкам, которые были предварительно загружены.
Якорь
target
: Значение атрибутаtarget
, применяемое к ссылке.rel
: Значение атрибутаrel
, применяемое к ссылке. По умолчанию для внешних ссылок используется"noopener noreferrer"
.
Перезапись значений по умолчанию
В Nuxt Config
Вы можете перезаписать некоторые значения по умолчанию для <NuxtLink>
в вашем nuxt.config
app.config
или в директорию app/
.export default defineNuxtConfig({
experimental: {
defaults: {
nuxtLink: {
// значения по умолчанию
componentName: 'NuxtLink',
externalRelAttribute: 'noopener noreferrer',
activeClass: 'router-link-active',
exactActiveClass: 'router-link-exact-active',
prefetchedClass: undefined, // может быть любым допустимым строковым именем класса
trailingSlash: undefined // может быть 'append' или 'remove'
}
}
}
})
Пользовательский компонент ссылки
Вы можете перезаписать значения по умолчанию <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"
)prefetchedClass
: Класс по умолчанию, применяемый к предварительно загруженным ссылкам.trailingSlash
: Возможность добавлять или удалять слэши в конце вhref
. Если значение не задано или не соответствует допустимым значениямappend
илиremove
, оно будет проигнорировано.prefetch
: Whether or not to prefetch links by default.prefetchOn
: Granular control of which prefetch strategies to apply by default.prefetchedClass
: A default class to apply to links that have been prefetched.