日付ピッカーの表示をカスタマイズする
日付ピッカーの表示は、uib-datepicker-popupディレクティブ配下でdatepicker-options属性を指定することで、カスタマイズすることもできます。datepicker-options属性は「オプション名: 値」のハッシュ形式で指定できます。設定可能なオプションは、以下のとおりです。
分類 | プロパティ | 概要 | デフォルト値 |
---|---|---|---|
基本 | initDate | ng-model値が指定されない場合の初期値 | - |
datepickerMode | カレンダーの表示モード(year/month/day) | day | |
startingDay | 週の始まりの曜日(0:日~6:土) | 0 | |
minDate | 選択可能な日付の最小値 | - | |
maxDate | 選択可能な日付の最大値 | - | |
表示 | minMode | 表示モードの下限 | day |
maxMode | 表示モードの上限 | year | |
formatDay | 日の形式 | dd | |
formatMonth | 月の形式 | MMMM | |
formatYear | 年の形式 | yyyy | |
formatDayHeader | 週ヘッダーの形式 | EEE | |
formatDayTitle | 日付を選択する際のタイトル形式 | MMMM yyyy | |
formatMonthTitle | 月を選択するときのタイトル形式 | yyyy | |
その他 | dateDisabled | 選択できない日付 | - |
customClass | 特定の日付に適用するスタイル | - |
たとえば以下は、先ほどのサンプルを修正して、日付を選択する際のタイトル形式を「yyyy年MM月」に、表示モードの上限をmonth(月選択)までとしています。カレンダーを日本語表記した場合、実質、formatDayTitleプロパティは必須です。さもないと「5月 2016」のような表記になってしまうからです。
<input id="date" type="text" ng-model="current" ng-focus="onopen($event)" uib-datepicker-popup="yyyy-MM-dd" is-open="opened" current-text="今日" clear-text="クリア" close-text="閉じる" datepicker-options="options" />
angular.module('myApp', [ 'ui.bootstrap' ]) .controller('MyController', ['$scope', function($scope) { $scope.current = new Date(); $scope.options = { formatDayTitle: "yyyy年MM月", maxMode: "month" } ...中略... }]);
確かに、日付選択時のタイトルが変更されていること、年選択画面に移動できないことが確認できるはずです。
ボタンからカレンダーを表示する
もちろん、イベントリスナーの紐付けを振り替えてやれば、テキストボックスへのフォーカスではなく、ボタンのクリックによってカレンダーを表示させることもできます。
以下には、修正したコードについてのみ掲載します。
<div class="col-md-2"> <label for="date">日付:</label> <p class="input-group"> <input id="date" name="date" type="text" class="form-control" ng-model="current" uib-datepicker-popup="yyyy-MM-dd" is-open="opened" current-text="今日" clear-text="クリア" close-text="閉じる" datepicker-options="options" /> <span class="input-group-btn"> <button type="button" class="btn btn-default" ng-click="onopen($event)"> <i class="glyphicon glyphicon-calendar"></i></button> </span> </p> </div>
先ほどの例では、テキストボックスにng-focus属性で紐づけていたリスナーを、ボタンのng-click属性で宣言するだけです。
ボタンに適用しているカレンダーのアイコンは、Bootstrap標準で提供されているものです。Bootstrapでは、よく利用するアイコンをあまた提供していますので、どんなものがあるのか、チェックしておくと良いでしょう。
Bootstrapによるアイコンボタンについては、「Bootstrapで業務Webアプリのカッコいい入力フォームを作る」などの記事も参考にしてください。