ざっくりとしたAngularJSの機能説明を行ったので、次は実際に使ってみましょう。今回はシンプルにAngularJSの動作を確認するだけなので、Bowerでjsファイルをインストールします。
% mkdir simple-angular && cd $_ % bower install angular ・ ・
次に、htmlファイルを作成します。リスト1のようなhtmlファイルを作成してください。
<!DOCTYPE html>
<html ng-app>
<head>
<script src="bower_components/angular/angular.js"></script>
</head>
<body ng-init="userName = 'taro'">
<strong>user name:</strong> {{userName}}<br />
<br />
<label>user name: <input type="text" ng-model="userName"/></label>
</body>
</html>
2行目のhtmlタグや7行目のbodyタグの中に見慣れない属性があります。これがAngularJSの「ディレクティブ」と呼ばれるカスタム属性です。ここでは三つのディレクティブを使用しており、それぞれ下記用途で使用されています。
このディレクティブは、AngularJSの適用範囲を指定します。これはDOMの範囲を意味し、2行目のようにhtmlタグにng-appを指定した場合、html要素とその子孫要素がAngularJSの適用範囲となり、ディレクティブや式を使用することができるようになります。
例えばリスト2のように、div要素に対してng-appを指定した場合、userNameのエクスプレッション構文がAngularJSの適用外なので双方向バインディングにはなりません(「{{userName}}」とテキストで表示されるだけ)。
<div ng-app>
<label>user name: <input type="text" ng-model="userName"/></label>
</div>
<strong>user name:</strong> {{userName}}<br />
モデルの初期値を設定します。Ajaxでデータを設定する際にはあまり使用することはありませんが、サーバーサイドでテンプレートを利用するときや初期表示におけるデータ表示を非同期で取得したくないケースでは、このディレクティブを使用することがあります。
リスト1では、7行目のbodyタグで使われています。
input要素やselectやlistなどの入力要素に対してモデルとのバインディングを行います。入力された値に対して入力チェックを行い、その結果の処理もng-modelが実施します。
リスト1の10行目のように、ng-modelディレクティブでuserNameがバインドされ、その上にある8行目のテキストインプットでは「{{userName}}」というようにエクスプレッション構文を使用してその値を表示しています。
実際にリスト1のHTMLをブラウザーで表示して、テキストインプットに値を入力してみてください。入力した値がすぐに表示に反映されていると思います。これが双方向データバインディングです。
ng-modelディレクティブと式を使用するだけで記述できるので、簡単に使うことができます。
なお、ディレクティブやデータバインディングについては、次回以降で詳細に解説します。
今後の連載ではAngularJS 1.4を使用していきますが、ここでAngularJSの次世代バージョンである2.0について説明しておきます。
AngularJS 2.0は、2015年に開催された、AngularJSカンファレンスで発表されました。現行の1.4と比較すると、非常に大きな変更がいくつか加えられています。主な変更点は次の通りです。
先ほど説明した双方向データバインディングやディレクティブが廃止される予定になっています。本連載では1.x系機能として上記機能についても解説していきます。
なお、その際には2.0での変更点を踏まえた上での解説をする予定です。また、AngularJS 2.0の公式サイトが、下記リンクにあるので、興味がある人は確認してみてください。
今回はMEANスタック構成においてフロント側のフルスタックフレームワークであるAngularJSについて、その概要と基本的な部分について説明しました。
次回はAngularJSの具体的な機能について、もう少し詳細に解説する予定です。
JavaScriptを中心としたWebアプリ開発の栄枯盛衰まとめ――LiveScriptからAngularJS/React.jsまで
Socket.IOでセンサー&MongoDB〜AngularJSアプリ間の通信を行う
エンタープライズ開発現場が知っておきたいHTML5の4つの意義
Struts後時代のJava EE/Javaモダン開発はどうあるべきか〜JJUG CCC 2014 Springまとめリポート(前編)Copyright © ITmedia, Inc. All Rights Reserved.