AngularJSチュートリアルやってメモメモ
Client MVCとやらに少し懐疑的だったのだが、ちょっとやってみたら楽しくなってきた(^_^)
サーバーサイドの似非MVCと違いちゃんとgood old Model-View-Controllerを踏襲していて、長くデスクトップアプリを離れていたオッサンの郷愁も誘う。
とりあえず本家サイトのチュートリアルやってみた。これやれば基本はマスター出来そうなカンジ。残念ながらまだ日本語版はないみたいなので、英語見ただけで避けちゃう人の為に1stepずつ内容抜粋していくことにした φ( ̄ー ̄ )メモメモ
※かなり意訳抜粋なので注意。誤訳もあるかも。ツッコミ大歓迎(^^)
1日1step目標・・・だけど今本業が忙しいので滞るカモ。
AngularJSチュートリアルやってメモメモ(前置き)
このチュートリアルではAndroid端末のカタログWEBアプリを作りながらAugularJSのつかい方を学ぶ。
このチュートリアルをやって分かること
- クライアントサイド・データバインディングと依存性注入(DI)機能を使って、ユーザーのアクションによって即時に変更が反映されるデータビューを作るやり方
- AngularJSがどの様にDOM操作なしでデータに対してリスナーを設定するか
- Webアプリをテストするよりベターで簡単な手法
- Angularサービスを使用してより簡単にWEB共通タスクを作成する方法
このチュートリアルを終わって出来るようになること
- 全てのブラウザで動作する動的アプリを作ること
- Anglarと一般的な他のJSフレームワークとの違いの理解
- AnglarJSのデータバインディングがどの様に機能するか理解
- anglar-seedプロジェクトを使って手っ取り早いプロジェクトの開始
- テストの作成と実行
- AnglarJSをもっと学ぶ為のリソースを知ること
チュートリアルを実行する為に、node.js(他のhttp serverを使用する場合は不要)とkarma(JS用TestRunner)を入れておく。
node.jsはnodejs.orgから。karmaはnpmで。
npm install -g karma
git clone git://github.com/angular/angular-phonecat.git
以降に記すコマンド例は全てここでcloneしてきたangular-phonecatディレクトリで実行する。
AngularJSチュートリアルやってメモメモ(step0 - とりあえず動かしてみる)
今回やるのはこちら↓
0 - Bootstrapping
以下コマンドでワーキングコピーがstep0のサンプルになる。ローカルにある編集は破棄されるので注意。
git checkout -f step-0
下記コマンドでnode.jsのhttp serverを起動。
./scripts/web-server.js
ブラウザでhttp://localhost:8000/app/index.htmlにアクセス。「Nothing here yet!」とだけ表示されればOK。
このサンプルですでにangularが使われている。
app/index.html↓
<!doctype html> <html lang="en" ng-app> <head> <meta charset="utf-8"> <title>My HTML File</title> <link rel="stylesheet" href="css/app.css"> <link rel="stylesheet" href="css/bootstrap.css"> <script src="lib/angular/angular.js"></script> </head> <body> <p>Nothing here {{'yet' + '!'}}</p> </body> </html>
コードの説明。
- ngAppディレクティブ
<html ng-app>
ng-app属性はAngularに対して、Angularが扱うべきアプリケーションの範囲(ルート要素)を示す。ngAppディレクティブと呼ぶ。上記の様にhtml全体を指定することも出来るし、一部分に指定することも出来る。
- AngularJS スクリプト読み込み
<script src="lib/angular/angular.js">
このコードはangluar.jsをダウンロードして、HTMLページが全てロードされた後に実行されるコールバックを登録する。コールバックが実行されると、AngularはngAppディレクティブを探して、それが定義されている要素をルートとするAngularアプリケーションを実行する。
- 式によるバインディング
Nothing here {{'yet' + '!'}}
波括弧2個で囲ってjavascriptライクなバインディング式を記述することができる。式はAngularによって評価され結果がDOMに挿入される。サンプルでは「yet」と「!」が文字列結合されて「Nothing here yet!」と出力されている。
結果の挿入は初回だけでなく、式評価が変更される度にずっと更新され続ける(次のstepで説明)。
Angular式のガイド↓
http://docs.angularjs.org/guide/expression
AngularJS アプリケーションの起動プロセス
まず、起動にはngAppディレクティブを使用した簡単な方法と、マニュアルで行う方法があるらしい。詳しくはhttp://docs.angularjs.org/guide/bootstrap
起動プロセス
- DIに使用されるinjectorが作成される
- injectorが、モデルのコンテキストとなるroot scopeを作成する
- AngularがngAppルート要素から始まるDOMをコンパイルし、その過程で見つかった全てのディレクティブとバインディングを処理する
Angularアプリケーションが一度起動されたら、モデルを変更しうるブラウザーのイベント(マウスクリック、key press、HTTP responseなど)を待機する。イベントを検知したらモデルに変更があるかチェックし、変更が見つかれば全ての影響のあるバインディングを更新し、ビューの表示に反映させる。(ここらへんがMVCだ)
angular-seedについて
このチュートリアルで使用するファイルは、angular-seed projectから作成されている。angular-seed projectは最近のAngularライブラリーと、テストライブラリー、スクリプト、シンプルな(典型的なWEBアプリ用設定済み)サンプルアプリケーションを含んでいる。