Step-7
マルチビューを持つアプリケーションの作り方。
マルチビューとルーティングとレイアウトテンプレート
これまでは1つのビューしかなかったので全てのテンプレートを index.html に記述していた。マルチビューにするにはまず index.html をレイアウトテンプレートと呼ぼれるものに変える。
そして、カレントルートに従って、部分テンプレート(→これが各ビューのテンプレート)がレイアウトテンプレートの中に入るようにする。
App モジュール
var phonecatApp = angular.module('phonecatApp', [ 'ngRoute', 'phonecatControllers' ]);
アプリケーション用のモジュールを作る。
ここでは 'phonecatApp' と名付ける。
第2引数ではアプリケーションが依存しているモジュールのリストを与える。ここでは 'ngRoute' と 'phoneControllers' 。
$routeProvider.when API
phonecatApp.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/phones', { templateUrl: 'partials/phone-list.html', controller: 'PhoneListCtrl' }). when('/phones/:phoneId', { templateUrl: 'partials/phone-detail.html', controller: 'PhoneDetailCtrl' }). otherwise({ redirectTo: '/phones' }); }]);
- URL のハッシュフラグメントが '/phones' の場合、phone list ビューが表示される。このビューを作るために phone-list.html テンプレートと PhoneListCtrl コントローラを使う。
- URL のハッシュフラグメントが '/phones/:phoneId' の場合、phone detail ビューが表示される。このビューを作るために phone-detail.html テンプレートと PhoneDetailCtrl コントローラを使う。
新しく作ったモジュールを使ってアプリケーションを起動するため、ngApp ディレクティブにモジュール名('phonecatApp')を指定しておく。
<!doctype html> <html lang="en" ng-app="phonecatApp"> ...
Controllers
phonecatControllers モジュールを作る。小さいアプリケーションでは2~3個のコントローラであれば1つのモジュールにまとめてしまう。
var phonecatControllers = angular.module('phonecatControllers', []); phonecatControllers.controller('PhoneListCtrl', ['$scope', '$http', function ($scope, $http) { $http.get('phones/phones.json').success(function(data) { $scope.phones = data; }); $scope.orderProp = 'age'; }]); phonecatControllers.controller('PhoneDetailCtrl', ['$scope', '$routeParams', function($scope, $routeParams) { $scope.phoneId = $routeParams.phoneId; }]);
Template
$route サービスは ngView ディレクティブと一緒に使われる。ngView ディレクティブの役割は、カレントルートに合わせてレイアウトテンプレートにビューテンプレートを読み込ませること。