2017-04-13 20 views
0

私は人間が読める日付にフォーマットしたい日付のISO文字列をいくつか持っています。私はangular-momentライブラリを使用して、フィルタを使用してテンプレート内でこれらの日付をフォーマットしています。角のグローバル変数

私は次のように表示される日付のフォーマットをカスタマイズしたい
<span>{{ $ctrl.date | amCalendar:referenceTime:formats }}</span> 

const dateFormats = { 
    relative: { 
    sameDay: '[Today at] LT', 
    lastWeek: 'DD MMM, YYYY [at] LT', 
    sameElse: 'DD MMM, YYYY [at] LT' 
    } 
} 

だから私は私のテンプレートでこれを行うことができます。

<span>{{ $ctrl.date | amCalendar:null:dateFormats }}</span> 

しかし、私はそれらのdateFormatsをしたいですこのコンポーネントのコントローラの中だけではなく、グローバルにどこかで暮らすことをお勧めします。他のテンプレートでこれらのdateFormatsを参照したいと思っています。

これはdateFormats$scopeに添付するための適切な使用例となりますか、これを処理する良い方法がありますか?

何か助けていただければ幸いです。前もって感謝します!

+0

[リンク](https://ilikekillnerds.com/:ここ

ワーキングサンプル2014/11/constant-values-global-variables-in-angularjs-the-right-way /)] –

+1

[この回答](http://stackoverflow.com/a/42876416/4131048)を見てください。カスタムフィルタを作成する必要はありません。[docs](https://github.com/urish/angular-moment#usage) – VincenzoC

+0

Sに記載されているように、 'run'関数で' amCalendar'をカスタマイズすることができますドキュメントを見ていたはずです。これはさらに優れています。これを回答として追加すると、私は同意します。 – realph

答えて

1

独自のカスタムフィルタを作成する必要があります。このような何か:

angular 
    .module('myApp') 
    .filter('myDateFormat', ['$filter',function ($filter) { 
     const dateFormats = { 
     relative: { 
      sameDay: '[Today at] LT', 
      lastWeek: 'DD MMM, YYYY [at] LT', 
      sameElse: 'DD MMM, YYYY [at] LT' 
     } 
     } 
     return function() { 
     return $filter('amCalendar')(null, dateFormats) 
     } 
    }]); 

さて、あなたは簡単に自分のモジュール内の任意のテンプレートからこのフィルタを利用することができます:

<span>{{ $ctrl.date | myDateFormat }}</span> 
+0

ええ、私はこのアプローチが最善の方法だと思っています。それは私をグローバルから遠ざけています。ありがとう! – realph

+0

@realph確かに、私が助けることができてうれしい:) – tanmay

2

私は日付のために行うことは例えばとして、カスタムフィルタ
を作成しています:

function ascDateFilter($filter) { 
    return function (input) { 
     return $filter('date')(input, "dd/MM HH:mm:ss"); 
    }; 
} 

あなたはこのような何かをして、カスタムフィルタでamCalendarフィルタを使用することができます。これにより、同じフィルタに日付をテンプレート化するすべてのコードがあります。

0

カスタムフィルタを作成する必要はありません、あなたは実行でamCalendarをカスタマイズすることができますdocsに記載されているように機能する。このリンクthis.refer行うには(シングルトンである)定数を使用することができます

angular.module('MyApp',['angularMoment']) 
 
.run(function(){ 
 
    const dateFormats = { 
 
    calendar: { 
 
     sameDay: '[Today at] LT', 
 
     lastWeek: 'DD MMM, YYYY [at] LT', 
 
     sameElse: 'DD MMM, YYYY [at] LT' 
 
    } 
 
    } 
 
    moment.updateLocale('en', dateFormats); 
 
}) 
 
.controller('AppCtrl', function($scope) { 
 
    $scope.date = new Date(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.9/angular.min.js"></script> 
 
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-moment/1.0.1/angular-moment.min.js"></script> 
 

 
<div ng-app="MyApp" ng-controller="AppCtrl"> 
 
    <span>{{ date | amCalendar }}</span> 
 
</div>