SHOEISHA iD

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

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

AngularJSではじめるJavaScriptフレームワーク開発スタイル

AngularJSのリリース前の新しいルーター機能(ngNewRouter)を触ってみよう

AngularJSで初めるJavaScriptフレームワーク開発スタイル 第10回

  • このエントリーをはてなブックマークに追加

 先日、いよいよAngularJS 1.4がリリースされました。今回は、そのリリースからはもれてしまいましたが、もともと1.4と同時にリリースされる予定であった新しいルーター機能について、開発中のソースをもとに紹介します。この新しいルーター機能の開発は少々遅れているようで、現時点では1.5へのリリースターゲットに変更されています。従って、リリース時には異なっている機能等もあるかもしれませんのでご注意下さい。

  • このエントリーをはてなブックマークに追加

対象読者

  • AngularJSを使っている開発者
  • JavaScriptのフレームワークの動向などに興味を持っている方
  • SPA(シングルページアプリケーション)に興味を持っている方

必要な環境

 この記事では、AngularJSを使用し、Chrome(42.0)、IE11、Firefox(37.0)、Safari(8.0.4)の環境にて確認を行っています。

ngNewRouter - 新しいRouter機能

 Router機能とはシングルページアプリケーションではほぼ必須となる機能で、#(ハッシュ)やHTML5でのHistory API(pushStateメソッド等)を使って、通信を必要としないURL変更に合わせて、AngularJSでのコントローラやテンプレートを切り替えて使うための機能です。

 今までもRouter機能は存在しましたが、標準のRouter機能をより多機能にそして使いやすくしたUI-Routerがサードパーティで存在し、そちらの方がより一般的なものになってしまった感がありました。

 今回の新しいRouter機能はルールを簡単に記述できるようにしたこともあり、UI-RouterにあるテンプレートやURL指定の柔軟性などが足りない部分も見られますが、今後を見据えての新しいモジュールとなり、注目すべき機能です。

利用方法

 新しいRouter機能(以下、ngNewRouter)を使うためには、ngNewRouter用のgithubからrouter.es5.jsもしくはrouter.es5.min.jsというファイルをダウンロードします。ただし、現在も開発中であることから、サンプルコード内に2015/05/20日時点のコードを含めています。サンプルコードも、そちらを前提にしています。

 ファイル名の中に"es5"という文字がありますが、気になった方もいるのではないでしょうか? es5というのはECMAScript 5の略で、HTML5などが使えるモダンブラウザで利用ができる比較的新しいバージョンのJavaScriptです。Angular 2.0ではTypeScriptで書き換えられていますが、この新しいルーター機能もそのような流れをくんでおりTypeScriptでの利用もターゲットに入っています。

 まだ、TypeScript用のリリースファイルは見つかりませんでしたが、興味がある方はAngularJS 2の動向も併せて調べてみるのも興味深いでしょう。

 では実際に利用してみましょう。リスト1はHTMLテンプレートのコード例です。

リスト1 ngNewRouterを使った際のHTMLテンプレート例(router/index.htmlの抜粋)
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <script src="../vendors/angular.js"></script>
    <!-- (1) 新しいRouter機能を使う為の指定 -->
    <script src="../vendors/router.es5.js"></script>

    <!-- (2) メインとなるモジュールの実装 -->
    <script src="app.js"></script>

    <!-- (3) コンポーネント部分の実装 -->
    <script src="components/item/item.js"></script>
    <script src="components/home/home.js"></script>
</head>
<body ng-app="app" ng-controller="AppController">
    <div ng-viewport></div>  <!-- (4) コンポーネントのビューの表示 -->
</body>
</html>

 (1)では、ngNewRouterのモジュールが使えるようにrouter.es5.jsを読みこみます。続いて(2)ではメインとなるAngularJSのモジュールを、(3)は、ngNewRouterで各コンポーネント用で使用するコントローラを定義しています。また、実際に表示されるテンプレートは(4)で指定したng-viewport属性を指定した要素内に表示されます。

 続いて、アプリのメインモジュールのコードです。

リスト2 アプリのメインモジュールの作成(router/app.jsの抜粋)
// (1) ngNewRouterを依存モジュールに指定し、モジュールを作成
var module = angular.module('app',['ngNewRouter','app.item']);
module.controller('AppController',['$router',AppController]);
// (2) URLとコンポーネントの関係を定義する
AppController.$routeConfig = [
    {path: '/',redirectTo: '/home'},
    {path : '/' ,component: 'home'},
    {path : '/home/:id' ,component: 'item'}
];
function AppController($router){
    // 特に処理がなくても、定義だけは必要
};

 ngNewRouterでは、コントローラとテンプレートのセットをコンポーネントというグループで管理しているので、メインモジュールではURLとコンポーネント名を関連付けする必要があります。

 まず、(1)では、newNewRouterを使うための依存モジュールを指定します。また、"app.item"というモジュールも追加していますが、こちらはこれから作る、itemというコンポーネント内で定義するモジュールで、コンポーネントの作成時に再度説明します。

 続いて、(2)では作成するコントローラにパス(path)とコンポーネント名(component)を指定します。この設定は図1のようになります。

 ここでのパスとはAngularJS上のパスであり、本サンプルではURLにハッシュ形式を使用していますので、#(ハッシュ)以降がパスとなります。

 また、HTML5モードではURLの表記は表1のように変わりますが、パスは同様であくまでもAngularJS上でのパスを指定し、今後、本稿の中でパスと表記した場合には、このパスを示します。また、componentの代わりに、redirectToを指定するとリダイレクトのように機能し、今回のサンプルでは「/」にアクセスすると自動的に「/home」にアクセスしなおします。

図1 設定とパス、コンポーネントの関係図
図1 設定とパス、コンポーネントの関係図
表1 URLハッシュ形式とHTML5モードでのURL表記の違い
URLハッシュの場合の例 HTML5モードの場合の例
http://localhost/router/index.html#/home http://localhost/router/home
http://localhost/router/#/item/345 http://localhost/router/item/345

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
コンポーネントの作成

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

  • このエントリーをはてなブックマークに追加
AngularJSではじめるJavaScriptフレームワーク開発スタイル連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛...

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8744 2015/06/23 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング