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

useRouter

useRouter composable 會回傳 router 實例。
pages/index.vue
<script setup lang="ts">
const router = useRouter()
</script>

如果你只需要在樣板中使用 router 實例,請使用 $router

pages/index.vue
<template>
  <button @click="$router.back()">Back</button>
</template>

如果你有 pages/ 目錄,useRouter 的行為會與 vue-router 提供的行為相同。

請閱讀 vue-router 關於 Router 介面的文件。

基本操作

  • addRoute():將新的路由加入 router 實例。parentName 可用於將新的路由作為現有路由的子路由加入。
  • removeRoute():透過名稱移除現有的路由。
  • getRoutes():取得所有路由記錄的完整清單。
  • hasRoute():檢查是否有名稱的路由存在。
  • resolve():回傳路由位置的正規化版本。也包含一個 href 屬性,其中包含任何現有的基本路徑。
範例
const router = useRouter()

router.addRoute({ name: 'home', path: '/home', component: Home })
router.removeRoute('home')
router.getRoutes()
router.hasRoute('home')
router.resolve({ name: 'home' })
router.addRoute() 會將路由詳細資訊加入路由陣列中,這在建立 Nuxt 外掛程式 時很有用,而 router.push() 則會立即觸發新的導航,這在頁面、Vue 元件和 composable 中很有用。

基於 History API

  • back():如果可能,在歷史記錄中返回,與 router.go(-1) 相同。
  • forward():如果可能,在歷史記錄中前進,與 router.go(1) 相同。
  • go():在歷史記錄中向前或向後移動,不受 router.back()router.forward() 中強制執行的階層限制。
  • push():透過在歷史堆疊中推送一個條目,以程式化的方式導航到新的 URL。建議改用 navigateTo
  • replace():透過替換路由歷史堆疊中的目前條目,以程式化的方式導航到新的 URL。建議改用 navigateTo
範例
const router = useRouter()

router.back()
router.forward()
router.go(3)
router.push({ path: "/home" })
router.replace({ hash: "#bio" })
閱讀更多關於瀏覽器的 History API。

useRouter composable 提供了 afterEachbeforeEachbeforeResolve 輔助方法,這些方法充當導航守衛。

然而,Nuxt 有一個 **路由中介軟體** 的概念,可以簡化導航守衛的實作,並提供更好的開發人員體驗。

請閱讀 文件 > 指南 > 目錄結構 > 中介軟體

Promise 和錯誤處理

  • isReady():回傳一個 Promise,當路由器完成初始導航時會解析。
  • onError:新增一個錯誤處理器,當導航期間發生未捕獲的錯誤時會呼叫它。
請閱讀 Vue Router 文件

通用路由器實例

如果你沒有 pages/ 資料夾,則 useRouter 會回傳一個具有類似輔助方法的通用路由器實例,但請注意,並非所有功能都可能被支援,或者行為與使用 vue-router 時完全相同。