透過超過 100 個技巧的集合學習 Nuxt!

<NuxtLink>

Nuxt 提供 <NuxtLink> 元件來處理應用程式內的任何連結。
<NuxtLink> 是 Vue Router 的 <RouterLink> 元件和 HTML 的 <a> 標籤的直接替代品。它會智慧地判斷連結是內部還是外部,並根據可用的最佳化(預先擷取、預設屬性等)進行渲染。

內部路由

在這個範例中,我們使用 <NuxtLink> 元件來連結到應用程式的另一個頁面。

pages/index.vue
<template>
  <NuxtLink to="/about">
    About page
  </NuxtLink>
  <!-- <a href="/about">...</a> (+Vue Router & prefetching) -->
</template>

將參數傳遞給動態路由

在這個範例中,我們傳遞 id 參數以連結到路由 ~/pages/posts/[id].vue

pages/index.vue
<template>
  <NuxtLink :to="{ name: 'posts-id', params: { id: 123 } }">
    Post 123
  </NuxtLink>
</template>
查看 Nuxt 開發工具中的「頁面」面板,以查看路由名稱及其可能採用的參數。

處理 404 錯誤

當使用 <NuxtLink> 連結 /public 目錄中的檔案或指向同一網域上的不同應用程式時,您應該使用 external 屬性。

使用 external 會強制連結渲染為 a 標籤,而不是 Vue Router 的 RouterLink

pages/index.vue
<template>
  <NuxtLink to="/the-important-report.pdf" external>
    Download Report
  </NuxtLink>
  <!-- <a href="/the-important-report.pdf"></a> -->
</template>

當使用絕對 URL 以及提供 target 屬性時,預設會套用外部邏輯。

外部路由

在這個範例中,我們使用 <NuxtLink> 元件來連結到一個網站。

app.vue
<template>
  <NuxtLink to="https://nuxtjs.org">
    Nuxt website
  </NuxtLink>
  <!-- <a href="https://nuxtjs.org" rel="noopener noreferrer">...</a> -->
</template>

targetrel 屬性

預設情況下,noopener noreferrerrel 屬性會套用至絕對連結和在新分頁中開啟的連結。

  • noopener 解決了舊版瀏覽器中的安全性錯誤
  • noreferrer 不會將 Referer 標頭傳送至連結的網站,從而提高使用者的隱私。

這些預設值對 SEO 沒有負面影響,並且被認為是最佳實務

當您需要覆寫此行為時,可以使用 relnoRel 屬性。

app.vue
<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>

屬性

當不使用 external 時,<NuxtLink> 支援所有 Vue Router 的RouterLink 屬性

  • hrefto 的別名。如果與 to 一起使用,則會忽略 href
  • noRel:如果設定為 true,則不會將 rel 屬性新增至連結
  • external:強制連結渲染為 a 標籤,而不是 Vue Router 的 RouterLink
  • prefetch:啟用時,會預先擷取視窗中連結的中介軟體、版面配置和酬載(當使用payloadExtraction時)。由實驗性的crossOriginPrefetch 設定使用。
  • prefetchOn:允許自訂控制何時預先擷取連結。可能的選項為 interactionvisibility(預設)。您也可以傳遞一個物件以進行完全控制,例如:{ interaction: true, visibility: true }。只有在啟用 prefetch(預設)且未設定 noPrefetch 時,才會使用此屬性。
  • noPrefetch:停用預先載入。
  • prefetchedClass:套用至已預先載入連結的類別。

錨點

  • target:要套用在連結上的 target 屬性值
  • rel:要套用在連結上的 rel 屬性值。外部連結預設為 "noopener noreferrer"
預設值可以被覆寫,如果您想變更它們,請參閱覆寫預設值

覆寫預設值

在 Nuxt 設定中

您可以在您的 nuxt.config 中覆寫一些 <NuxtLink> 的預設值

這些選項未來可能會被移到其他地方,例如 app.configapp/ 目錄中。
nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    defaults: {
      nuxtLink: {
        // default values
        componentName: 'NuxtLink',
        externalRelAttribute: 'noopener noreferrer',
        activeClass: 'router-link-active',
        exactActiveClass: 'router-link-exact-active',
        prefetchedClass: undefined, // can be any valid string class name
        trailingSlash: undefined // can be 'append' or 'remove'
      }
    }
  }
})

您可以使用 defineNuxtLink 建立您自己的連結元件來覆寫 <NuxtLink> 的預設值。

components/MyNuxtLink.ts
export default defineNuxtLink({
  componentName: 'MyNuxtLink',
  /* see signature below for more */
})

然後您可以像平常一樣使用 <MyNuxtLink /> 元件,並且使用您的新預設值。

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:套用在啟用中連結的預設類別。作用方式與Vue Router 的 linkActiveClass 選項相同。預設值為 Vue Router 的預設值 ("router-link-active")
  • exactActiveClass:套用在精確啟用中連結的預設類別。作用方式與 Vue Router 的 linkExactActiveClass 選項相同。預設值為 Vue Router 的預設值 ("router-link-exact-active")
  • trailingSlash:一個選項,用於在 href 中新增或移除尾隨斜線。如果未設定或不符合有效值 appendremove,則將會忽略。
  • prefetch:是否預設預先載入連結。
  • prefetchOn:精細控制預設套用哪些預先載入策略。
  • prefetchedClass:套用至已預先載入連結的預設類別。
文件 > 範例 > 路由 > 頁面中閱讀並編輯即時範例。