Vue Routerでページ遷移を作る|一覧・詳細・登録・編集の基本

プログラミング

※ 当ブログ「日々是事始め(コレコト)」はプロモーションを含みます。

コンポーネントで画面の部品は作れるようになっても、「一覧ページから詳細ページへ移動する」ようなページの切り替えはどうやるのか、最初は分かりませんでした。Vue で作る SPA(1つのHTMLで複数ページを表現するアプリ)では、この役割を Vue Router が担います。この記事では、一覧・詳細・登録・編集という業務アプリの定番ページを例に、基本を整理します。

※ 学習用に調べた内容を個人的にまとめたものです。文章は AI の補助を受けて作成しています。


Vue Router=URLと画面コンポーネントの対応表

Vue Router がやることは、突き詰めると「この URL のときは、この画面コンポーネントを表示する」という対応づけです。業務アプリでよくあるページ構成なら、こんな対応になります。

URL画面
/tasksタスク一覧
/tasks/new新規登録フォーム
/tasks/:idタスク詳細(:id は動的)
/tasks/:id/edit編集フォーム

ルートを定義する

URL と画面コンポーネントの対応を routes にまとめ、createRouter で作ります。

// src/app/router/index.ts
import { createRouter, createWebHistory } from 'vue-router'
import TaskListPage from '@/features/tasks/pages/TaskListPage.vue'
import TaskDetailPage from '@/features/tasks/pages/TaskDetailPage.vue'

const routes = [
  { path: '/tasks', name: 'task-list', component: TaskListPage },
  { path: '/tasks/:id', name: 'task-detail', component: TaskDetailPage },
]

export const router = createRouter({
  history: createWebHistory(),
  routes,
})

あとは main.tsapp.use(router) すれば準備完了です。


router-view と router-link

<router-view> は「今の URL に対応する画面がここに表示される」差し込み口。<router-link> はページ移動用のリンク(<a> の Vue Router 版)です。

<!-- App.vue -->
<template>
  <nav>
    <router-link to="/tasks">タスク一覧</router-link>
  </nav>

  <!-- ここに現在ページの画面が入る -->
  <router-view />
</template>

<router-view> の置き忘れは「リンクを押しても何も表示されない」の定番原因なので注意です。


router-link と router.push の違い

移動には2通りあります。テンプレートに書くリンクは router-link、処理の中で移動させたいときは router.push を使います。

<script setup lang="ts">
import { useRouter } from 'vue-router'

const router = useRouter()

async function onSaved() {
  // 保存が終わったら一覧へ戻す、のような使い方
  router.push('/tasks')
}
</script>
  • router-link … 画面上のリンク(クリックで移動)
  • router.push … 「保存後に一覧へ戻す」など処理の流れの中で移動

動的パラメータ :id を受け取る

/tasks/:id:id は URL ごとに変わる値。詳細ページ側では useRoute で受け取ります。

<script setup lang="ts">
import { useRoute } from 'vue-router'

const route = useRoute()
const id = route.params.id   // 例: "42"
// この id を使って詳細データを取得する
</script>

最初は認証ガードなどの複雑な機能は入れず、「URL と画面を対応させる」「一覧・詳細・登録・編集を分ける」「:id で対象を切り替える」までを押さえれば、業務アプリの骨格は作れます。



もっと体系的に学ぶなら(書籍)

この記事はシリーズの一部です。TypeScript前提で Composition API・Pinia・Vue Router・テストまで一冊で体系的に学びたい方には、内容がそのまま重なる次の本がおすすめです。

次に読む

Piniaはいつ必要か|propsだけでは足りない場面と状態管理の基本
※ 当ブログ「日々是事始め(コレコト)」はプロモーションを含みます。ログイン中のユーザー名を、ヘッダーにもマイページにも表示したい。props で親から子へ、さらにその子へ…とデータを延々と手渡ししていく「バケツリレー」に、私はすぐ音を上げ...
Vue 3を体系的に学ぶロードマップ|初心者がリアクティブ・REST API・Swagger連携・Vuetifyまで理解する手順
※ 当ブログ「日々是事始め(コレコト)」はプロモーションを含みます。Vue 3 を学び始めたとき、私がいちばん困ったのは「何から手をつければいいのか分からない」ことでした。リアクティブ、Composition API、Vue Router、...

PR

Back to top
タイトルとURLをコピーしました