Nuxt Nation カンファレンスが開催されます。11月12日~13日にご参加ください。

useRouter

useRouter コンポーザブルは、ルーターインスタンスを返します。
pages/index.vue
<script setup lang="ts">
const router = useRouter()
</script>

テンプレート内でルーターインスタンスのみが必要な場合は、$router を使用してください。

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

pages/ ディレクトリがある場合、useRoutervue-router によって提供されるものと動作は同じです。

Router インターフェースに関する vue-router のドキュメントをお読みください。

基本操作

  • addRoute(): ルーターインスタンスに新しいルートを追加します。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 コンポーネント、およびコンポーザブルで役立ちます。

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 コンポーザブルは、ナビゲーションガードとして機能する afterEachbeforeEachbeforeResolve ヘルパーメソッドを提供します。

ただし、Nuxt には、ナビゲーションガードの実装を簡素化し、より優れた開発エクスペリエンスを提供する **ルートミドルウェア** の概念があります。

ドキュメント > ガイド > ディレクトリ構造 > ミドルウェア で詳細をお読みください。

Promise とエラー処理

  • isReady(): ルーターが初期ナビゲーションを完了したときに解決される Promise を返します。
  • onError: ナビゲーション中にキャッチされないエラーが発生するたびに呼び出されるエラーハンドラーを追加します。
Vue Router ドキュメント で詳細をお読みください。

ユニバーサルルーターインスタンス

pages/ フォルダーがない場合、useRouter は同様のヘルパーメソッドを備えたユニバーサルルーターインスタンスを返しますが、すべての機能がサポートされているわけではなく、vue-router とまったく同じように動作するわけではないことに注意してください。