SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

AngularJSアプリ開発を支援する便利モジュール

AngularJSアプリにマルチビュー/入れ子にも対応したルーティング機能を実装する(UI Router)

AngularJSアプリ開発を支援する便利モジュール 第4回

UI Routerならではの機能

 じつは、ここまでは標準のngRouteモジュールでも実装できる内容で、さほどに目新しいものではありません。別稿「AngularJSのngRouteを使ってシングルページアプリケーション(SPA)を作ってみよう」とも比較して、理解を深めてください。

 ここからはUI Routerならではの機能について、主なものをピックアップしていきます。

ルートパラメーターのデータ型/形式を指定

 UI Routerでは、ルートパラメーターを「:名前」「*名前」で指定する他、{名前:...}の形式でプレイスホルダーを指定することもできます。{名前:...}構文を利用することで、パラメーターに制約条件を付与します。

(1)データ型による制限

 たとえば、先ほどのmembersステートで変数idが整数であることが判っているならば、「/members/{id:int}」のように表します。この場合、「/members/10」「members/123」にはマッチしますが、「/members/hoge」のようなパスにはマッチしません。

 データ型には、intのほかにも、string、dateなどを指定できます。

(2)正規表現パターンによる制限

 上の例で、たとえば3~5桁の数値と、より厳密に表現したい場合には、正規表現パターンを利用することもできます。たとえば、先ほどのmembersステートであれば「/members/{id:[0-9]{3,5}}」のように表します。この場合、「members/123」はマッチしますが、「/members/10」のようなパスにはマッチしません。

複数のビュー領域を準備する

 UI Routerでは、メインテンプレートに複数のui-view属性を配置することで、ビュー領域を複数用意することもできます。ただし、ui-view属性が複数ある場合には、属性値としてビュー名を指定しなければなりません。

リスト4 複数のビュー領域を設置(double.html)
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<meta charset="UTF-8" />
<title>AngularJS</title>
<script src="bower_components/angular/angular.min.js"></script>
<script src="bower_components/angular-ui-router/release/angular-ui-router.min.js"></script>
<script src="scripts/double.js"></script>
</head>
<body>
<div ui-view="main"></div>
<hr />
<div ui-view="sub"></div>
</body>
</html>

 これら複数のビュー領域それぞれに対して、コントローラー/テンプレートを指定するには、stateメソッドに対してviewsパラメーターを指定します。

リスト5 複数のビューに対応する設定(double.js)
angular.module('myApp', [ 'ui.router' ])
  .config(['$stateProvider', '$urlRouterProvider',
    function($stateProvider, $urlRouterProvider) {
    $stateProvider
      .state('home', {
        url: '/',
        // main/sub領域に対する設定を宣言
        views: {
          main: {
            controller: 'MainController',
            templateUrl: 'views/main.html'
          },
          sub: {
            controller: 'SubController',
            templateUrl: 'views/sub.html'
          }
        }
      });
      $urlRouterProvider.otherwise('/');
  }])
  .controller('MainController', ['$scope', function($scope) {
    $scope.msg = 'メイン';
  }])
  .controller('SubController', ['$scope', function($scope) {
    $scope.msg = 'サブ';
  }]);
ページ上下に複数のビュー領域を配置
ページ上下に複数のビュー領域を配置

 viewsパラメーターの配下では、「ビュー名: 設定情報」の形式でビュー単位の設定を表します。設定情報で利用できるパラメーターは、先ほどの表で触れたものと同じです。

次のページ
まとめ

この記事は参考になりましたか?

AngularJSアプリ開発を支援する便利モジュール連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト(ウイングスプロジェクト)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9012 2015/10/19 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー