AngularJSの開発者ガイドを読んでAAngularJSのディレクティブとディレクティブの正規化についてまとめました。
※目次をクリックすると目次の下部にコンテンツが表示されます。
ディレクティブとは?
※参照
Developer Guide / Directives
・ディレクティブはDOM要素(属性、要素名、CSSクラス)のマーカーといえるもので、AngularJSのHTMLコンパイラ($compileサービス)にDOM要素に対するある特定の振る舞いを付与するように指示したり、DOM要素とその子要素を変換するように指示したりします。
・Angularには、ngBind、ngModel、ngViewなどデフォルトで組み込まれているディレクティブが多数ありますがコントローラやサービスを作るのと同じように自分でディレクティブを定義することも出来ます。
●要素とディレクティブのマッチについて
例1)<input ng-model=”foo”>
<input>要素はngModelディレクティブにマッチします。
例2)<input data-ng:model=”foo”>
上記も<input>要素はngModelにマッチします。
●正規化
・Angularは要素のタグや属性名でどのディレクティブにマッチするか判断します。
・ディレクティブは、”ngModel”のようにcase-sensitiveでcamelCaseで正規化されます。
・HTMLはcase-insensitiveなので、ng-modelのように小文字の”-“区切りを使用します。
・正規化は下記のように行われます。
①属性や要素のフロントにある”x-“と”data-“を取り除く。
②:、-、_などで区切られた名前をcamelCaseに変換する。
Developer Guide / Directives
・ディレクティブはDOM要素(属性、要素名、CSSクラス)のマーカーといえるもので、AngularJSのHTMLコンパイラ($compileサービス)にDOM要素に対するある特定の振る舞いを付与するように指示したり、DOM要素とその子要素を変換するように指示したりします。
・Angularには、ngBind、ngModel、ngViewなどデフォルトで組み込まれているディレクティブが多数ありますがコントローラやサービスを作るのと同じように自分でディレクティブを定義することも出来ます。
●要素とディレクティブのマッチについて
例1)<input ng-model=”foo”>
<input>要素はngModelディレクティブにマッチします。
例2)<input data-ng:model=”foo”>
上記も<input>要素はngModelにマッチします。
●正規化
・Angularは要素のタグや属性名でどのディレクティブにマッチするか判断します。
・ディレクティブは、”ngModel”のようにcase-sensitiveでcamelCaseで正規化されます。
・HTMLはcase-insensitiveなので、ng-modelのように小文字の”-“区切りを使用します。
・正規化は下記のように行われます。
①属性や要素のフロントにある”x-“と”data-“を取り除く。
②:、-、_などで区切られた名前をcamelCaseに変換する。
ディレクティブの正規化の例
ディレクティブの正規化について実際にサンプルコードで確認してみます。
●サンプルコードの仕様
・テキストボックスにテキストを入力すると、即その下に入力したテキストが表示されるようにします。
・inputタグに入力されたテキストをコントローラ内のスコープ上の属性にバインドさせるのにngModelディレクティブを使用します。
・HTML要素内で指定したテキストを置換するのにngBindディレクティブを使用します。
・HTML内で指定するngBindディレクティブは正規化されるので、ng-bind以外にもng:bind、ng_bind、data-ng-bind、x-ng-bindと指定しても正しく処理されます。
・スタイルは、ブートストラップを使って設定してみました。
●サンプルコード
●サンプルコードの仕様
・テキストボックスにテキストを入力すると、即その下に入力したテキストが表示されるようにします。
・inputタグに入力されたテキストをコントローラ内のスコープ上の属性にバインドさせるのにngModelディレクティブを使用します。
・HTML要素内で指定したテキストを置換するのにngBindディレクティブを使用します。
・HTML内で指定するngBindディレクティブは正規化されるので、ng-bind以外にもng:bind、ng_bind、data-ng-bind、x-ng-bindと指定しても正しく処理されます。
・スタイルは、ブートストラップを使って設定してみました。
●サンプルコード
(HTML)
<!doctype html>
<html ng-app="docsBindExample">
<head>
<meta charset="utf-8">
<title>AngularJS-Bootstrap</title>
<script src="js/angular.min.js"></script>
<script src="js/docsBindExample.js"></script>
<script src="js/ui-bootstrap-tpls-0.9.0.js"></script>
<link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div ng-controller="Ctrl1">
<form class="form-horizontal" role="form">
<div class="form-group">
<label class="col-sm-2 control-label">入力欄</label>
<div class="col-sm-10">
<input type="text" class="form-control" ng-model='name'>
</div>
</div>
</form>
<hr/>
<div class="col-sm-12">
<div class="well">
<span ng-bind="name"></span> <br/>
<span ng:bind="name"></span> <br/>
<span ng_bind="name"></span> <br/>
<span data-ng-bind="name"></span> <br/>
<span x-ng-bind="name"></span> <br/>
</div>
</div>
</div>
</body>
</html>
("js/docsBindExample.js")
angular.module('docsBindExample', [])
.controller('Ctrl1', function Ctrl1($scope) {
$scope.name = 'ここにテキストを入力すると下に表示されます。';
});
AngularJSの特徴、仕組み
ビルトインディレクティブ
- ビルトインのディレクティブの概要
- データバインディングのディレクティブの概要
- ng-repeatを使ってリスト、テーブル、フィルター
- ng-includeを使って別のHTMLファイルを埋め込み
- ng-switchを使って内部にあるHTMLテンプレートの表示を切り替え
- ng-if、ng-show、ng-hideを使って表示、非表示を切り替え
- ng-class、ng-styleを使ってCSSを設定
- イベント処理
- 有効、無効を切替えるディレクティブ
- フォームの入力チェックを行い、動的にCSS追加
- ng-optionsを使ってSelectメニューを作成
- ng-repeatを使ってラジオボタンを作成
- ビルトインのフィルターの使用方法
- ビルトインのフィルターで関数を使用
- カスタムフィルターの使用方法
- Bootstrap3を使ってページング
- スクリプト内でフィルターを使用、既存のフィルターを拡張
サービス
- サービスの概要とfactory、service、providerの使い分け
- $qサービスでpromise/deferredパターン
- $httpサービスの概要、サーバーからJSONデータ取得
- $httpサービスのPOSTでデータ送信
- $qサービスを使ってhttpリクエストを複数実行
- $httpサービスのinterceptorの使用方法
- AngularJSのwithCredentialsの設定、CORS
- $timeoutサービスと$intervalサービス
- $resourceサービスを使ってREST
- $locationサービスを使ってURLを操作
- $routeサービスと$resourceサービスを使ったサンプルを作成
- routeChangeSuccessを使ってflashメッセージ表示
- JavaScript、CSSを含むHTMLデータをバインドして表示
カスタムディレクティブ
AngularJSの特徴、仕組み
ビルトインディレクティブ
- ビルトインのディレクティブの概要
- データバインディングのディレクティブの概要
- ng-repeatを使ってリスト、テーブル、フィルター
- ng-includeを使って別のHTMLファイルを埋め込み
- ng-switchで内部にあるHTMLテンプレートの表示を切り替え
- ng-if、ng-show、ng-hideを使って表示、非表示を切り替え
- ng-class、ng-styleを使ってCSSを設定
- イベント処理
- 有効、無効を切替えるディレクティブ
- フォームの入力チェックを行い、動的にCSS追加
- ng-optionsを使ってSelectメニューを作成
- ng-repeatを使ってラジオボタンを作成
- ビルトインのフィルターの使用方法
- ビルトインのフィルターで関数を使用
- カスタムフィルターの使用方法
- Bootstrap3を使ってページング
- スクリプト内でフィルターを使用、既存のフィルターを拡張
サービス
- サービスの概要とfactory、service、providerの使い分け
- $qサービスでpromise/deferredパターン
- $httpサービスの概要、サーバーからJSONデータ取得
- $httpサービスのPOSTでデータ送信
- $qサービスを使ってhttpリクエストを複数実行
- $httpサービスのinterceptorの使用方法
- AngularJSのwithCredentialsの設定、CORS
- $timeoutサービスと$intervalサービス
- $resourceサービスを使ってREST
- $locationサービスを使ってURLを操作
- $routeサービスと$resourceサービスを使ったサンプルを作成
- routeChangeSuccessを使ってflashメッセージ表示
- JavaScript、CSSを含むHTMLデータをバインドして表示
カスタムディレクティブ