AngularJSは、Googleによって開発された人気のあるフロントエンドフレームワークであり、動的なウェブアプリケーションの構築に広く使用されています。その中で、ルーティングはアプリケーションのページ遷移や状態管理を簡単に行うための重要な機能です。本記事では、AngularJSにおけるルーティングについて、基本的な使い方から高度なカスタマイズまで、完全かつ包括的に解説します。
1. ルーティングとは?
ルーティングとは、ウェブアプリケーションで特定のURLにアクセスしたときに、どのコンテンツを表示するかを制御する仕組みです。AngularJSでは、ngRoute
モジュールを利用して、URLとビュー(画面表示)を関連付け、アプリケーション内のページ遷移を管理します。これにより、単一のページ上で異なるコンテンツを動的に表示できるようになります。

2. AngularJSのルーティングモジュールのインストール
AngularJSのルーティング機能を使用するためには、まずngRoute
モジュールをインクルードする必要があります。通常、AngularJSのプロジェクトにはangular-route.js
が必要となります。
html<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js">script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular-route.min.js">script>
次に、AngularJSアプリケーションにngRoute
モジュールを依存関係として追加します。
javascriptvar app = angular.module('myApp', ['ngRoute']);
3. ルート設定
ルート設定は、$routeProvider
を使用して行います。$routeProvider
は、URLパターンとそれに対応するビュー(HTMLテンプレート)やコントローラーを関連付けるための設定を提供します。
例えば、次のようにルートを設定できます:
javascriptapp.config(function($routeProvider) {
$routeProvider
.when('/home', {
templateUrl: 'home.html',
controller: 'HomeController'
})
.when('/about', {
templateUrl: 'about.html',
controller: 'AboutController'
})
.otherwise({
redirectTo: '/home'
});
});
上記の例では、/home
と/about
という2つのルートを定義しています。templateUrl
は表示するHTMLテンプレートのパスを指定し、controller
はそのテンプレートに関連付けるコントローラーを指定します。もし、どのルートにも一致しない場合は、otherwise
で定義した/home
にリダイレクトされます。
4. ビューの切り替え
ルーティングを設定した後、実際にビューを切り替えるために、HTMLにng-view
ディレクティブを追加します。ng-view
は、ルートに対応するテンプレートを表示する場所を指定するためのプレースホルダです。
html<div ng-view>div>
これにより、指定されたルートに応じて異なるテンプレートが表示されます。
5. コントローラーの設定
各ビューには対応するコントローラーを設定します。コントローラーは、ビューに動的なデータを提供したり、ユーザーからの入力を処理したりする役割を果たします。
例えば、次のようにHomeController
とAboutController
を定義することができます:
javascriptapp.controller('HomeController', function($scope) {
$scope.message = "Welcome to the Home Page!";
});
app.controller('AboutController', function($scope) {
$scope.message = "Welcome to the About Page!";
});
これにより、それぞれのテンプレートで表示されるデータをコントローラーで動的に変更できます。
6. 動的ルートパラメータ
AngularJSでは、URLに動的なパラメータを含めることができます。これにより、URLの一部を変化させながら、同じビューで異なるコンテンツを表示することが可能です。
例えば、以下のように設定することができます:
javascriptapp.config(function($routeProvider) {
$routeProvider
.when('/user/:userId', {
templateUrl: 'user.html',
controller: 'UserController'
});
});
この例では、/user/123
や/user/456
のようなURLが適用され、userId
というパラメータがコントローラーに渡されます。
コントローラー側でパラメータを取得するには、$routeParams
サービスを使用します:
javascriptapp.controller('UserController', function($scope, $routeParams) {
$scope.userId = $routeParams.userId;
});
これにより、userId
の値がビューに表示されるようになります。
7. ガード機能と認証
AngularJSのルーティングでは、ページ遷移の前に認証やその他のチェックを行いたい場合があります。これを実現するためには、$routeProvider
の中でガード機能を設定できます。
例えば、$routeProvider
にresolve
を使用して、ルートの前に非同期で認証処理を行うことができます。
javascriptapp.config(function($routeProvider) {
$routeProvider
.when('/dashboard', {
templateUrl: 'dashboard.html',
controller: 'DashboardController',
resolve: {
auth: function($q, AuthService) {
var deferred = $q.defer();
if (AuthService.isAuthenticated()) {
deferred.resolve();
} else {
deferred.reject('Not Authenticated');
}
return deferred.promise;
}
}
});
});
上記の例では、AuthService
を使ってユーザーが認証されているか確認し、認証されていなければ拒否されます。この機能により、不正なアクセスを防ぐことができます。
8. ルーティングの高度な機能
AngularJSのルーティングは、基本的なページ遷移だけでなく、以下のような高度な機能もサポートしています。
-
Nested Routes(ネストされたルート)
ルート内にさらに子ルートを設定し、複雑なビュー構造を実現できます。 -
Lazy Loading(遅延読み込み)
必要なときにのみテンプレートやコントローラーを読み込むことができ、アプリケーションの初期ロード時間を短縮できます。 -
HTML5 History Mode
デフォルトでは、AngularJSはハッシュ(#
)を使ってURLを管理しますが、HTML5の歴史モードを有効にすると、よりクリーンなURL(/home
のようなURL)を使用できます。
javascriptapp.config(function($locationProvider) {
$locationProvider.html5Mode(true);
});
9. まとめ
AngularJSのルーティングは、シングルページアプリケーション(SPA)においてページ遷移を効率的に管理するための強力なツールです。基本的なルート設定から、動的パラメータや認証ガード、遅延読み込みなどの高度な機能まで、幅広い機能を提供します。これにより、ユーザーにスムーズで直感的なナビゲーション体験を提供することができます。
AngularJSのルーティングを活用することで、効率的で柔軟なウェブアプリケーションの開発が可能となります。