JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

AngularJSとHTML5の日付入力値 – Firefoxで読み取り可能な日付値を表示する方法

HTML5の日付入力とAngularJSの連携

HTML5の type="date" 属性を持つ <input> 要素を使用すると、ユーザーはテキストボックスへの直接入力、または日付ピッカー(カレンダーUI)を使って簡単に日付を入力できます。さらに、AngularJSの ng-model ディレクティブを組み合わせれば、アプリケーションのデータとHTML入力コントロールを双方向にバインドすることが可能です。

Firefoxにおける問題点

ところが、Firefoxは現在 type="date" をサポートしていないため、入力された値がすべて文字列として扱われてしまいます。これにより、日付をDateオブジェクトとして操作したい場合に不都合が生じます。

解決策:2つの変数を連携させる

日付を文字列ではなく、実際のDateオブジェクトとして扱いたい場合は、別の変数を作成し、2つの変数を $watch で連携させる方法が有効です。以下のコードでその実装例を示します。

<input type = "date" ng-model = "realdate" />

function MainCtrl($scope, dateFilter) {
   $scope.date = new Date();
   $scope.$watch('date', function (date){
      $scope.dateString = dateFilter(date, 'yyyy-MM-dd');
   });
   $scope.$watch('realdate', function (realdate){
      $scope.date = new Date(realdate);
   });
}

このコードでは、dateFilter を使ってDateオブジェクトを「yyyy-MM-dd」形式の文字列に変換しつつ、realdate の変更を監視して文字列を再びDateオブジェクトに変換しています。これにより、Firefoxのような type="date" 非対応ブラウザでも、日付値を正しく読み取り可能な形式で表示・操作できるようになります。

  1. Windows 10で入力インジケーターと言語バーを表示・非表示にする方法

    Windowsでは、表示言語と入力言語の両方に対応した複数の言語を簡単にインストールできます。新しい言語パックをインストールすると、利用可能な場合は適切なキーボードレイアウトも自動的に追加されます。頻繁に言語を切り替えて入力する方にとって、入力インジケーターや言語バーを有効にしておくと、ワンクリックで言語を切り替えられるようになり非常に便利です。この記事では、Windows 10で入力インジケーターと言語バーを表示・非表示にする方法を詳しく解説します。Windows 10で入力インジケーターを表示・非表示にする入力インジケーターは通常、タスクバーに表示されます。そのため、表示・非表示を切り替え

  2. Chrome・Firefoxで垂直タブ(縦型タブ)を使う方法|おすすめ拡張機能紹介

    Microsoftは近年、自社のEdgeブラウザに「垂直タブ(縦型タブ)」機能を導入しました。開いているタブをすべてブラウザのサイドに積み重ねて表示できる、クリーンでミニマルな機能です。これにより、従来のようにブラウザ上部が長いタブのリストで埋め尽くされることがなくなります。個人的には非常にすっきりしていて魅力的に感じますが、垂直タブのためだけに別のブラウザへ乗り換えるのは現実的とは言えません。幸い、拡張機能を活用すれば、他のブラウザでも同じような体験を実現できます。この記事では、ChromeとFirefoxで垂直タブを利用できるようにするおすすめの拡張機能を紹介します。 Chromeで垂