AngularUI Bootstrapを使ったモーダル画面表示
【前提条件】
[環境]
- AngularJS 1.2.5
- AngularUI Bootstratp 0.10.0
- Bootstrap 3.0.3
参考サイト
AngularJS
http://http://angularjs.org/
AngularUI Bootstrap
http://http://angular-ui.github.io/bootstrap/
Bootstrap
http://getbootstrap.com/
【概要】
AngularJSで簡単にモーダルを表示できる
プラグインがあったので実装方法についてまとめてみました。
【モーダル画面】
<div class="modal-header"> <h3>{{modalHeader}}</h3> </div> <div class="modal-body"> <span style="white-space: pre-line;">{{modalBody}}</span> </div> <div class="modal-footer"> <button class="btn btn-primary" ng-click="ok()">OK</button> </div>
AngularJSを使った普通の画面を用意します。
作成した画面内ではコントローラの指定はしなくて良いです。
CSSやJSなどは呼び出し元の画面で参照させるようにします。
AngularJS、AngularUI Bootstrap、Bootstrapの参照も
基の画面で定義してください。
【JavaScipt】
[インポート]
var importimportModules = [ "ui.bootstrap" ]; var modalService = angular.module("modalService", importimportModules);
u.bootstrapをインポートします。
[コントローラ]
モーダル画面用のコントローラを作成します。
modalService.controller(
"BasicModalController",
[
"$scope",
"$modalInstance",
"modalParam",
function($scope, $modalInstance, modalParam) {
$scope.modalHeader = modalParam.modalHeader;
$scope.modalBody = modalParam.modalBody;
$scope.ok = function() {
modalParam.okFunc();
$modalInstance.close();
};
}
]
);
$modalInstanceはモーダル画面用のオブジェクトです。
今回のサンプルではOKボタンを押した後に閉じるようにしています。
modalParamは各画面から必要なパラメータを受け取るためのオブジェクトです。
モーダルのヘッダー(modalParam.modalHeader)、ボディ(modalParam.modalBody)、
OKボタンクリック時の挙動(modalParam.modalokFunc)を
各画面で変えられるようにしています。
[サービス]
今回のサンプルではモーダル画面表示をサービスとして実装しています。
modalService.service(
"ModalService",
[
"$modal",
function($modal) {
var openModal = function(modalParam) {
$modal.open(
{
templateUrl : "common/basicModal.html",
controller : "BasicModalController",
backdrop : false,
resolve : {
modalParam : function () {
return modalParam;
}
}
}
);
};
return {
openModal : openModal
};
}
]
);
$modalがモーダルを開くためのオブジェクトになります。
open関数ではモーダルが開きます。
templateUrlには作成したモーダル画面用のHTMLを指定します。
controllerにはモーダル画面用のコントローラを指定します。
backdropにtrueを指定するとモーダル外を
クリックでウィンドウがクローズされます。
今回はクローズさせたくないのでfalseを指定します。
resolveにはコントローラ内で独自の変数を扱うためのプロパティです。
今回はモーダル画面のヘッダなどを各画面から指定できるようにします。
resolveにmodalParamと言う名前で関数を作成し、
同名のオブジェクトを返却するようにしています。
resolveを指定することによりコントローラ内で
同名のオブジェクトをインジェクションすることができます。
[呼び出し元]
ModalService.openModal({ modalHeader : "ヘッダーです", modalBody : "ボディです。\r\nサンプルでは改行されるようにしています。", okFunc : function () { alert("閉じます"); } });
呼び出し元では作成したサービスから関数を呼び出します。
modalParamに必要なプロパティを指定します。
指定したパラメータがサービス内の$modalのresolveに渡される
↓
resolveがコントローラのパラメータとしてインジェクションされる
と言う流れコントローラで使用できるようになります。
【まとめ】
簡単にモーダル画面を表示することができました。
モーダル画面自体を単体のHTMLとして編集ができるので、
非常にカスタマイズしやすいと思います。
また、AngularUI Bootstrapはモーダル以外にもあるので、
Bootstrapを使っているのであれば
公式サイトのサンプルを眺めて見るといいかもしれません。

