AngularJSカスタムディレクティブ内でコントローラを生成し、他のディレクティブで利用するサンプルを作成しました。
デモとコードサンプルはこちら。
(1)サンプルコードの仕様
●カスタムディレクティブ productTotal
・controller属性を使って商品リストの商品の合計金額を計算するupdateTotal関数を定義
●カスタムディレクティブ productItem
・商品リストの各商品の名前、単価、個数を表示。
・個数はユーザーが変更可能で、個数変更時にproductTotalのupdateTotal関数関数を使って合計金額を更新する。
(2)サンプルコードの作成
1)商品リストの合計金額を計算するディレクティブ作成
・controller属性でupdateTotal関数を定義し、他のカスタムディレクティブによって合計金額を計算できるようにする。
demoApp.directive("productTotal", function () { return { scope: { total: "=productTotal", data: "=productData" }, controller: function ($scope, $element, $attrs) { this.updateTotal = function() { var calc = 0; for (var i = 0; i < $scope.data.length; i++) { calc += $scope.data[i].quantity * $scope.data[i].price * 1.08; } $scope.total = calc; } } } });
2)各商品を表示するディレクティブを作成し、上記コントローラを利用
demoApp.directive("productItem", function () { return { template: "<td>{{item.name}}</td><td>{{item.price}}</td><td><input ng-model='item.quantity' /></td>", require: "^productTotal", link: function (scope, element, attrs, ctrl) { scope.$watch("item.quantity", function () { ctrl.updateTotal(); }); } } });
①require属性
・このカスタムディレクティブが依存するディレクティブをrequire。
・"productTotal"という名前のディレクティブに依存し、このディレクティブの探索場所として親要素も含めるので"^"を指定します。
②link関数で他のディレクティブのコントローラを利用
link関数の4番目に引数を指定します。
この引数を使ってコントローラで定義したメソッドを実行できます。
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データをバインドして表示
カスタムディレクティブ