Vue RouterによるSPAルーティング実装ガイド

1. Vue Routerの概要

Vue Routerは、Vue.js公式のルーティング管理ライブラリです。Vue.jsのコアと深く統合されており、シングルページアプリケーション(SPA)の構築を容易にします。主な機能には以下のものがあります:

  • ネストされたルート/ビュー階層
  • モジュール化されたコンポーネントベースのルート設定
  • ルートパラメータ、クエリ、ワイルドカード
  • Vue.jsトランジションシステムに基づくビュー遷移効果
  • 細やかなナビゲーション制御
  • 自動アクティブ化されるCSSクラスを持つリンク
  • HTML5履歴モードまたはハッシュモード(IE9で自動フォールバック)
  • カスタムスクロール動作

フロントエンドルーティングとバックエンドルーティング

バックエンドルーティング:従来のWebサイトでは、すべてのリンクがURLアドレスであり、各URLはサーバー上の対応リソースにマッピングされます。

フロントエンドルーティング:シングルページアプリケーションでは、主にURLのハッシュ(#)を使用して異なるページ間を切り替えます。ハッシュはHTTPリクエストに含まれないため、SPAでのページ遷移はハッシュを利用して実装されます。この方式をフロントエンドルーティングと呼び、バックエンドルーティングと区別します。

公式ドキュメント:https://router.vuejs.org/ja/

2. Vue Routerの基本的な実装

Vue Routerをアプリケーションに統合する基本的な手順:

  1. VueRouterコンストラクタをインポートする
  2. ルート定義オブジェクトを作成する
  3. Vueインスタンスにルーターを登録する
  4. テンプレートに<router-view>コンポーネントを配置する
// コンポーネント定義
const LoginPage = {
  template: '<div><h1>ログイン画面</h1></div>'
}

const RegisterPage = {
  template: '<div><h1>登録画面</h1></div>'
}

// ルート設定
const routes = [
  { path: '/login', component: LoginPage },
  { path: '/register', component: RegisterPage }
]

// ルーターインスタンスの作成
const router = new VueRouter({
  routes
})

// Vueインスタンスへのルーター登録
const app = new Vue({
  router,
  el: '#app'
})

3. ルートリダイレクト

特定のパスにアクセスした際に別のパスに自動的に転送する方法:

// デフォルトルートの設定(非推奨)
// { path: '/', component: HomePage }

// リダイレクトによるデフォルトルートの設定
const routes = [
  { path: '/', redirect: '/home' },
  { path: '/home', component: HomePage },
  // 他のルート定義...
]

4. ネストされたルーティング

childrenプロパティを使用して親子関係を持つルートを定義できます。子ルートのパスは先頭にスラッシュを付けないようにします。

// 親コンポーネント
const AccountComponent = {
  template: `
    <div>
      <h2>アカウントセクション</h2>
      <nav>
        <router-link to="/account/profile">プロフィール</router-link> |
        <router-link to="/account/settings">設定</router-link>
      </nav>
      <router-view></router-view>
    </div>
  `
}

// 子コンポーネント
const ProfileComponent = {
  template: '<div><h3>プロフィールページ</h3></div>'
}

const SettingsComponent = {
  template: '<div><h3>設定ページ</h3></div>'
}

// ネストされたルート設定
const routes = [
  {
    path: '/account',
    component: AccountComponent,
    children: [
      {
        path: 'profile',
        component: ProfileComponent
      },
      {
        path: 'settings',
        component: SettingsComponent
      }
    ]
  }
]

5. ネームドビュー

単一のURLで複数のビューを表示する場合に使用します。各<router-view>に名前を付けて、ルート定義で対応するコンポーネントを指定します。

// 複数のビューコンポーネント
const HeaderView = {
  template: '<div><h1>ヘッダー</h1></div>'
}

const SidebarView = {
  template: '<div><h2>サイドバー</h2></div>'
}

const ContentView = {
  template: '<div><h2>メインコンテンツ</h2></div>'
}

// HTMLテンプレート
/*
<div id="app">
  <router-view></router-view>
  <router-view name="sidebar"></router-view>
  <router-view name="content"></router-view>
</div>
*/

// ネームドビューのルート設定
const router = new VueRouter({
  routes: [
    {
      path: '/',
      components: {
        default: HeaderView,
        sidebar: SidebarView,
        content: ContentView
      }
    }
  ]
})

6. ルートパラメータと動的ルーティング

動的なセグメントを使用してルートパラメータを定義できます。

// 動的ルートの定義
const UserRoute = {
  template: `
    <div>
      <h2>ユーザーID: {{ $route.params.id }}</h2>
      <router-link :to="`/user/${$route.params.id}/posts`">投稿一覧</router-link>
      <router-view></router-view>
    </div>
  `
}

const UserPostsRoute = {
  template: `
    <div>
      <h3>ユーザーの投稿</h3>
      <p>ユーザーID: {{ $route.params.id }}</p>
    </div>
  `
}

const routes = [
  { path: '/user/:id', component: UserRoute },
  { path: '/user/:id/posts', component: UserPostsRoute }
]

タグ: vue.js Vue Router SPA フロントエンドルーティング ルーティング設定

7月28日 23:01 投稿