alert・dialog・modal・popoverの使い分けがよく分からなかったので、試してみました。
alert
アラートダイアログには通常のアラートダイアログ、確認ダイアログ、入力ダイアログの3種類があります。
HTML
<ons-navigator var="myNavigator"> <ons-page> <div class="contents"> <ons-list> <ons-list-item modifier="chevron" ng-click="alert1()">alert</ons-list-item> <ons-list-item modifier="chevron" ng-click="alert2()">confirm()</ons-list-item> <ons-list-item modifier="chevron" ng-click="alert3()">confirm() 選択肢4つ</ons-list-item> <ons-list-item modifier="chevron" ng-click="alert4()">prompt()</ons-list-item> </ons-list> </div> </ons-page> </ons-navigator>
JavaScript
var app = angular.module('app', ['onsen']); app.controller('app_Ctrl', function($scope) { // アラートダイアログの表示 $scope.alert1 = function() { ons.notification.alert({ title: 'アラートタイトル', messageHTML: 'アラートメッセージ', buttonLabel: 'OK', animation: 'default', callback: function() { console.log('alertのコールバック'); } }) } // 確認ダイアログの表示 $scope.alert2 = function() { ons.notification.confirm({ title: '確認タイトル', messageHTML: '確認メッセージ', buttonLabels: ['No', 'Yes'], animation: 'default', cancelable: true, callback: function(index) { if(index == -1) { console.log('confirmのコールバック:キャンセル'); } else if(index == 0) { console.log('confirmのコールバック:No'); } else if(index == 1) { console.log('confirmのコールバック:Yes'); } } }) } // 確認ダイアログの3つ以上の選択肢 $scope.alert3 = function() { ons.notification.confirm({ title: '確認タイトル', messageHTML: '確認メッセージ', buttonLabels: ['Answer1', 'Answer2', 'Answer3', 'Answer4'], animation: 'default', cancelable: false, callback: function(index) { if(index == 0) { console.log('confirmのコールバック:Answer1'); } else if(index == 1) { console.log('confirmのコールバック:Answer2'); } else if(index == 2) { console.log('confirmのコールバック:Answer3'); } else if(index == 3) { console.log('confirmのコールバック:Answer4'); } } }) } // 入力ダイアログの表示 $scope.alert4 = function() { ons.notification.prompt({ title: '入力タイトル', messageHTML: '入力メッセージ', buttonLabel: 'Yes', animation: 'default', callback: function(str) { console.log(str); } }) } });
notification.alert(options) | アラートダイアログを表示。 |
---|---|
notification.confirm(options) | 確認ダイアログを表示。 |
notification.prompt(options) | 入力ダイアログを表示。 |
上記では簡単な設定でアラートダイアログを表示しましたが、カスタマイズしたアラートダイアログを作ったり、用意されているイベントやメソッドを使用することもできます。
HTML
<ons-navigator var="myNavigator"> <ons-page> <div class="contents"> <ons-list> <ons-list-item modifier="chevron" ng-click="customAlertShow()">show</ons-list-item> <ons-list-item modifier="chevron" ng-click="customAlertSetCancelable()">setCancelable</ons-list-item> <ons-list-item modifier="chevron" ng-click="customAlertSetDisabled()">setDisabled</ons-list-item> </ons-list> <ons-template id="custom-alert.html"> <ons-alert-dialog var="customAlert" cancelable disabled mask-color="rgba(0, 0, 0, 0.8)"> <div class="alert-dialog-title">カスタムアラートタイトル</div> <div class="alert-dialog-content">カスタムアラートメッセージ</div> <ons-list> <ons-list-item modifier="chevron" ng-click="customAlertIsShown()">isShown</ons-list-item> <ons-list-item modifier="chevron" ng-click="customAlertDestroy()">destroy</ons-list-item> </ons-list> <div class="alert-dialog-footer"> <button class="alert-dialog-button" ng-click="customAlertHide()">OK</button> </div> </ons-alert-dialog> </ons-template> </div> </ons-page> </ons-navigator>
JavaScript
var app = angular.module('app', ['onsen']); app.controller('app_Ctrl', function($scope) { // 表示 $scope.customAlertShow = function() { customAlert.show(); } // 非表示 $scope.customAlertHide = function() { customAlert.hide(); } // 表示されているかどうか $scope.customAlertIsShown = function() { console.log(customAlert.isShown()); } // キャンセルできるかどうかの設定(背景タップ) $scope.customAlertSetCancelable = function() { if(customAlert.isCancelable()) { customAlert.setCancelable(false); } else { customAlert.setCancelable(true); } } // disabled状態にするかどうかの設定 $scope.customAlertSetDisabled = function() { if(customAlert.isDisabled()) { customAlert.setDisabled(false); } else { customAlert.setDisabled(true); } } // 破棄 $scope.customAlertDestroy = function() { customAlert.destroy(); } var showCount = 0; ons.ready(function() { // 読み込み ons.createAlertDialog('custom-alert.html').then(function(customAlert) { // 表示前 customAlert.on('preshow', function(e) { showCount++; console.group('preshow'); console.log(e.alertDialog); console.groupEnd(); // 3回目の表示をキャンセル if(showCount == 3) { console.log('cancel'); e.cancel(); } }); // 表示後 customAlert.on('postshow', function(e) { console.group('postshow'); console.log(e.alertDialog); console.groupEnd(); }); // 非表示前 customAlert.on('prehide', function(e) { console.group('prehide'); console.log(e.alertDialog); console.groupEnd(); }); // 非表示後 customAlert.on('posthide', function(e) { console.group('posthide'); console.log(e.alertDialog); console.groupEnd(); }); }); }); });
createAlertDialog(template) | カスタマイズしたアラートダイアログを読み込み。 |
---|---|
show([options]) | アラートダイアログを表示。 |
hide([options]) | アラートダイアログを非表示。 |
isShown() | アラートダイアログが表示されているかどうかを返す。 |
isCancelable() | アラートダイアログがキャンセル可能かどうかを返す。 |
setCancelable(boolean) | アラートダイアログをキャンセルできるかどうかを設定。 |
isDisabled() | アラートダイアログがdisabled状態かどうかを返す。 |
setDisabled(boolean) | アラートダイアログをdisabled状態にするかどうかを設定。 |
destroy() | アラートダイアログを破棄。 |
preshow | アラートダイアログが表示される前に発火。 |
postshow | アラートダイアログが表示された後に発火。 |
prehide | アラートダイアログが非表示になる前に発火。 |
posthide | アラートダイアログが非表示になった後に発火。 |
dialog
ダイアログは汎用的なダイアログの表示に使用できます。
HTML
<ons-navigator var="myNavigator"> <ons-page> <div class="contents"> <ons-list> <ons-list-item modifier="chevron" ng-click="dialogShow()">show</ons-list-item> <ons-list-item modifier="chevron" ng-click="dialogSetCancelable()">setCancelable</ons-list-item> <ons-list-item modifier="chevron" ng-click="dialogSetDisabled()">setDisabled</ons-list-item> </ons-list> <ons-template id="dialog.html"> <ons-dialog var="dialog" cancelable disabled mask-color="rgba(255, 0, 0, 0.2)"> <ons-list> <ons-list-item modifier="chevron" ng-click="dialogIsShown()">isShown</ons-list-item> <ons-list-item modifier="chevron" ng-click="dialogDestroy()">destroy</ons-list-item> </ons-list> <ons-button ng-click="dialogHide()">hide()</ons-button> </ons-dialog> </ons-template> </div> </ons-page> </ons-navigator>
JavaScript
var app = angular.module('app', ['onsen']); app.controller('app_Ctrl', function($scope) { // 表示 $scope.dialogShow = function() { dialog.show(); } // 非表示 $scope.dialogHide = function() { dialog.hide(); } // 表示されているかどうか $scope.dialogIsShown = function() { console.log(dialog.isShown()); } // キャンセルできるかどうかの設定(背景タップ) $scope.dialogSetCancelable = function() { if(dialog.isCancelable()) { dialog.setCancelable(false); } else { dialog.setCancelable(true); } } // disabled状態にするかどうかの設定 $scope.dialogSetDisabled = function() { if(dialog.isDisabled()) { dialog.setDisabled(false); } else { dialog.setDisabled(true); } } // 破棄 $scope.dialogDestroy = function() { dialog.destroy(); } var showCount = 0; ons.ready(function() { // 読み込み ons.createDialog('dialog.html').then(function(dialog) { // 表示前 dialog.on('preshow', function(e) { showCount++; console.group('preshow'); console.log(e.dialog); console.groupEnd(); // 3回目の表示をキャンセル if(showCount == 3) { console.log('cancel'); e.cancel(); } }); // 表示後 dialog.on('postshow', function(e) { console.group('postshow'); console.log(e.dialog); console.groupEnd(); }); // 非表示前 dialog.on('prehide', function(e) { console.group('prehide'); console.log(e.dialog); console.groupEnd(); }); // 非表示後 dialog.on('posthide', function(e) { console.group('posthide'); console.log(e.dialog); console.groupEnd(); }); }); }); });
createDialog(template) | ダイアログを読み込み。 |
---|---|
show([options]) | ダイアログを表示。 |
hide([options]) | ダイアログを非表示。 |
isShown() | ダイアログが表示されているかどうかを返す。 |
isCancelable() | ダイアログがキャンセル可能かどうかを返す。 |
setCancelable(boolean) | ダイアログをキャンセルできるかどうかを設定。 |
isDisabled() | ダイアログがdisabled状態かどうかを返す。 |
setDisabled(boolean) | ダイアログをdisabled状態にするかどうかを設定。 |
destroy() | ダイアログを破棄。 |
preshow | ダイアログが表示される前に発火。 |
postshow | ダイアログが表示された後に発火。 |
prehide | ダイアログが非表示になる前に発火。 |
posthide | ダイアログが非表示になった後に発火。 |
modal
モーダルはダイアログと違い、表示中は外の入力操作ができなくなります。
プログレスバーの表示やユーザーの選択を確実に行いたい場合などに使用するようです。
HTML
<ons-navigator var="myNavigator"> <ons-page> <div class="contents"> <ons-button ng-click="modalShow()">show</ons-button> <ons-button ng-click="modalToggle()">toggle</ons-button> <ons-modal var="modal"> <div>モーダル内容</div> <ons-button ng-click="modalHide()">hide</ons-button> </ons-modal> </div> </ons-page> </ons-navigator>
JavaScript
var app = angular.module('app', ['onsen']); app.controller('app_Ctrl', function($scope, $interval) { // 表示 $scope.modalShow = function() { modal.show(); } // 非表示 $scope.modalHide = function() { modal.hide(); } // 表示・非表示の切り替え $scope.modalToggle = function() { $interval(function() { modal.toggle(); }, 1000); } });
show() | モーダルを表示。 |
---|---|
hide() | モーダルを非表示。 |
toggle() | モーダルの表示を切り替え。 |
popover
ポップオーバーは指定した要素に対してツールチップのような表示をします。
HTML
<ons-navigator var="myNavigator"> <ons-page> <div class="contents"> <ons-list> <ons-list-item modifier="chevron" ng-click="popoverShow()">show</ons-list-item> <ons-list-item modifier="chevron" ng-click="popoverSetCancelable()">setCancelable</ons-list-item> </ons-list> <p id="description">コンテンツ内容</p> <ons-template id="popover.html"> <ons-popover var="popover"> <ons-page> <div>ポップオーバーの内容</div> <ons-button ng-click="popoverIsShown()">isShown()</ons-button> <ons-button ng-click="popoverDestroy()">destroy()</ons-button> <ons-button ng-click="popoverHide()">hide()</ons-button> </ons-page> </ons-popover> </ons-template> </div> </ons-page> </ons-navigator>
JavaScript
var app = angular.module('app', ['onsen']); app.controller('app_Ctrl', function($scope) { // 表示 $scope.popoverShow = function() { popover.show('#description'); } // 非表示 $scope.popoverHide = function() { popover.hide(); } // 表示されているかどうか $scope.popoverIsShown = function() { console.log(popover.isShown()); } // キャンセルできるかどうかの設定(背景タップ) $scope.popoverSetCancelable = function() { if(popover.isCancelable()) { popover.setCancelable(false); } else { popover.setCancelable(true); } } // 破棄 $scope.popoverDestroy = function() { popover.destroy(); } var showCount = 0; ons.ready(function() { // 読み込み ons.createPopover('popover.html').then(function(popover) { // 表示前 popover.on('preshow', function(e) { showCount++; console.group('preshow'); console.log(e.popover); console.groupEnd(); // 3回目の表示をキャンセル if(showCount == 3) { console.log('cancel'); e.cancel(); } }); // 表示後 popover.on('postshow', function(e) { console.group('postshow'); console.log(e.popover); console.groupEnd(); }); // 非表示前 popover.on('prehide', function(e) { console.group('prehide'); console.log(e.popover); console.groupEnd(); }); // 非表示後 popover.on('posthide', function(e) { console.group('posthide'); console.log(e.popover); console.groupEnd(); }); }); }); });
表示の方向はdirectionを設定することで指定できます。
HTML
<ons-navigator var="myNavigator"> <ons-page> <div class="contents"> <ons-list> <ons-list-item modifier="chevron" ng-click="popoverShow1()">direction="up"</ons-list-item> <ons-list-item modifier="chevron" ng-click="popoverShow2()">direction="down"</ons-list-item> <ons-list-item modifier="chevron" ng-click="popoverShow3()">direction="left"</ons-list-item> <ons-list-item modifier="chevron" ng-click="popoverShow4()">direction="right"</ons-list-item> </ons-list> <div id="description2"></div> <ons-template id="popover1.html"> <ons-popover var="popover1" direction="up"> <ons-page> <div>ポップオーバー1</div> <ons-button ng-click="popover1.hide();">hide()</ons-button> </ons-page> </ons-popover> </ons-template> <ons-template id="popover2.html"> <ons-popover var="popover2" direction="down"> <ons-page> <div>ポップオーバー2</div> <ons-button ng-click="popover2.hide();">hide()</ons-button> </ons-page> </ons-popover> </ons-template> <ons-template id="popover3.html"> <ons-popover var="popover3" direction="left"> <ons-page> <div class="pop-left"> <div>ポップオーバー3</div> <ons-button ng-click="popover3.hide();">hide()</ons-button> </div> </ons-page> </ons-popover> </ons-template> <ons-template id="popover4.html"> <ons-popover var="popover4" direction="right"> <ons-page> <div>ポップオーバー4</div> <ons-button ng-click="popover4.hide();">hide()</ons-button> </ons-page> </ons-popover> </ons-template> </div> </ons-page> </ons-navigator>
JavaScript
var app = angular.module('app', ['onsen']); app.controller('app_Ctrl', function($scope) { // 上に表示 $scope.popoverShow1 = function() { popover1.show('#description2'); } // 下に表示 $scope.popoverShow2 = function() { popover2.show('#description2'); } // 左に表示 $scope.popoverShow3 = function() { popover3.show('#description2'); } // 右に表示 $scope.popoverShow4 = function() { popover4.show('#description2'); } ons.ready(function() { ons.createPopover('popover1.html'); ons.createPopover('popover2.html'); ons.createPopover('popover3.html'); ons.createPopover('popover4.html'); }); });
createPopover(template) | ポップオーバーを読み込み。 |
---|---|
show(target[, options]) | targetの位置にポップオーバーを表示。 |
hide([options]) | ポップオーバーを非表示。 |
isShown() | ポップオーバーが表示されているかどうかを返す。 |
isCancelable() | ポップオーバーがキャンセル可能かどうかを返す。 |
setCancelable(boolean) | ポップオーバーをキャンセルできるかどうかを設定。 |
destroy() | ポップオーバーを破棄。 |
preshow | ポップオーバーが表示される前に発火。 |
postshow | ポップオーバーが表示された後に発火。 |
prehide | ポップオーバーが非表示になる前に発火。 |
posthide | ポップオーバーが非表示になった後に発火。 |
【参考サイト】
コメントが承認されるまで時間がかかります。