時刻入力ボックスを実装する
同じくUI BootstrapのTimepickerデイレクティブを利用することで、時刻入力ボックスを生成できます。UI Bootstrapを有効にする手順は、先ほどのDatepickerの場合と同じなので、詳細は前節の解説も合わせて参照してください。
<!DOCTYPE html> <html ng-app="myApp"> <head> <meta charset="UTF-8" /> <title>AngularJS</title> <!-- UI BootstrapとBootstrap本体をインポート --> <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.min.css" /> <script src="bower_components/angular/angular.min.js"></script> <script src="bower_components/angular-i18n/angular-locale_ja-jp.js"></script> <script src="bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js"></script> <script src="scripts/time.js"></script> </head> <body ng-controller="MyController"> <form> <uib-timepicker ng-model="current" hour-step="hourStep" minute-step="minuteStep" show-meridian="amPm"> </uib-timepicker> 時刻:{{current.toLocaleTimeString()}} </form> </body> </html>
angular.module('myApp', [ 'ui.bootstrap' ]) .controller('MyController', ['$scope', function($scope) { $scope.current = new Date(); $scope.hourStep = 1; $scope.minuteStep = 10; $scope.amPm = true; }]);
時刻入力ボックスを生成するのは、<uib-timepicker>要素(ディレクティブ)の役割です。また、時刻入力ボックスの表示/挙動を変更するために、以下のような属性を指定できます。
属性 | 概要 | デフォルト値 |
---|---|---|
hour-step | 時間の増減 | 1 |
minute-step | 分の増減 | 1 |
show-meridian | 午前/午後の選択を表示するか | true |
meridians | 午前/午後の表記(例:[AM, PM]) | - |
mousewheel | マウスホイールによる選択を可能にするか | true |
arrowkeys | [↑][↓]キーによる選択を可能にするか | true |
ng-model属性には、選択された時刻値がDateオブジェクトとして返されますので、ここでは、これをtoLocaleTimeStringメソッドで整形したものを、ページ上部に反映させているわけです。
まとめ
本稿では、日付/時刻入力に利用できるUI BootstrapのDatepicker/Timepikerを紹介しました。特に、カレンダーの表示は一から実装するとなると、中々に手間も大きい部分です。こうした定番のライブラリに頼ることで、ぐんとコードを簡素化できることが、お分かりいただけたと思います。
次回は、引き続き日付の操作に関する話題で、日付に紐づいた情報をカレンダーに表示するためのUI Bootstrap/UI Calendarについて紹介する予定です。
参考資料
- 『AngularJSアプリケーションプログラミング』(技術評論社)
- 『AngularJSライブラリ 活用レシピ 厳選 108』(WINGSプロジェクト)