2017-04-13 116 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

你可以使用常量(这是一个单)做this.refer此链接[链接](https://ilikekillnerds.com/ 2014/11 /常量值全局变量在angularjs-right-way /)] –

+1

看看[这个答案](http://stackoverflow.com/a/42876416/4131048),那里无需创建自定义过滤器,您可以按照[文档](https://github.com/urish/angular-moment#usage) – VincenzoC

+0

S中所述在“run”函数中自定义“amCalendar”应该查看文档。这更好。如果您将此添加为答案,我会接受。 – realph

回答

1

您应该创建自己的自定义过滤器。事情是这样的:

<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

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) 
     } 
    }]); 

现在,您可以轻松地从你的模块中的任何模板使用此过滤器功能描述在docs中。

这里工作示例:

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>