角度全局变量
问题描述:
我有一些日期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
的正确用例还是有更好的方法来处理此问题吗?
任何帮助表示赞赏。提前致谢!
答
我的日期做的是创建一个自定义过滤器
,例如:
function ascDateFilter($filter) {
return function (input) {
return $filter('date')(input, "dd/MM HH:mm:ss");
};
}
你可以做这样的事情,并在您的自定义过滤器中使用的过滤器amCalendar。有了这个,你可以在同一个过滤器中将所有的代码模板化。
答
没有必要创建一个自定义过滤器,您可以在运行定制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>
你可以使用常量(这是一个单)做this.refer此链接[链接](https://ilikekillnerds.com/ 2014/11 /常量值全局变量在angularjs-right-way /)] –
看看[这个答案](http://*.com/a/42876416/4131048),那里无需创建自定义过滤器,您可以按照[文档](https://github.com/urish/angular-moment#usage) – VincenzoC
S中所述在“run”函数中自定义“amCalendar”应该查看文档。这更好。如果您将此添加为答案,我会接受。 – realph