Skip to content

导航

页面间导航组件,基于 Vue Router 的 <RouterLink>,增加了预取、外部链接检测等功能。

vue
<template>
  <!-- 内部链接 -->
  <NuxtLink to="/about">关于</NuxtLink>

  <!-- 动态链接 -->
  <NuxtLink :to="`/user/${id}`">用户</NuxtLink>

  <!-- 对象形式 -->
  <NuxtLink :to="{ name: 'user-id', params: { id: 1 } }">用户</NuxtLink>

  <!-- 外部链接 -->
  <NuxtLink to="https://nuxt.com" external>官网</NuxtLink>

  <!-- 禁用预取 -->
  <NuxtLink to="/heavy" no-prefetch>重页面</NuxtLink>

  <!-- 新窗口打开 -->
  <NuxtLink to="/report" target="_blank">报告</NuxtLink>
</template>

Props

Prop类型默认值说明
tostring | object-目标路由(必填)
hrefstring-to 的别名
externalboolean自动检测是否外部链接
targetstring-_blank_self
relstring-链接关系(如 noopener
noRelbooleanfalse不加 rel 属性
prefetchbooleantrue是否预取目标页面
noPrefetchbooleanfalse禁用预取
activeClassstring-激活时的 CSS class
exactActiveClassstring-精确匹配时的 CSS class

自动检测外部链接

NuxtLink 会自动判断链接是否为外部链接:

vue
<template>
  <!-- 自动检测为外部链接 -->
  <NuxtLink to="https://example.com">外部</NuxtLink>

  <!-- 以 // 开头也视为外部 -->
  <NuxtLink to="//cdn.example.com">CDN</NuxtLink>

  <!-- 需要手动指定 external 的场景 -->
  <NuxtLink to="/api/redirect" external>API 重定向</NuxtLink>
</template>

TIP

外部链接会渲染为 <a> 标签且不经过 Vue Router 内部链接使用 <router-link> 实现 SPA 导航

预取行为

预取是 NuxtLink 最重要的性能优化功能:

行为说明
默认启用链接进入视口时自动预取目标页面
监测方式使用 IntersectionObserver 监测链接可见性
预取内容目标页面的 JS 组件和数据
外部链接不预取
vue
<template>
  <!-- 全局禁用预取(nuxt.config.ts) -->
  <!-- routerOptions: { prefetchLinks: false } -->

  <!-- 单个链接禁用预取 -->
  <NuxtLink to="/heavy-page" no-prefetch>重页面</NuxtLink>

  <!-- 单个链接启用预取(全局禁用时) -->
  <NuxtLink to="/important" prefetch>重要页面</NuxtLink>
</template>

激活状态样式

vue
<template>
  <!-- 自定义激活样式 -->
  <NuxtLink
    to="/dashboard"
    active-class="text-blue-500"
    exact-active-class="font-bold text-blue-600"
  >
    Dashboard
  </NuxtLink>
</template>

<style>
/* 也可以用 CSS 属性选择器 */
a.router-link-active {
  color: blue;
}
a.router-link-exact-active {
  font-weight: bold;
}
</style>

TIP

active-class 在路由部分匹配时生效(如 /dashboard/settings 也会激活 /dashboard 链接) exact-active-class 仅在精确匹配时生效

<a> 标签的对比

特性<NuxtLink><a>
内部导航SPA 路由跳转(无刷新)整页刷新
外部链接自动渲染为 <a>始终为 <a>
预取✅ 支持
激活状态✅ 自动检测
SEO两者等效两者等效

INFO

️ 项目内部页面必须使用 <NuxtLink> 而非 <a> 标签 否则会触发整页刷新,失去 SPA 体验

基于 Nuxt 4 官方文档整理编写