Установите формат фильтра AngularJS, который будет использоваться всеми ссылками на фильтр даты?
Скорее, чтобы определить пользовательский формат для каждого вызова фильтра date
, есть ли способ глобально определить формат по умолчанию (кроме 'medium'
)?
Я хотел бы, чтобы формат был установлен в одном файле, а не повсюду в моем коде (формат даты может быть изменен в будущем, а модификация в одном файле будет намного приятнее, чем необходимость вносить изменения во многих файлах).
Это то, что я делаю сейчас (определяя формат даты каждый раз):
{{systemTime | date:'dd MMMM @ HH:mm:ss'}}
{{modifiedTime | date:'dd MMMM @ HH:mm:ss'}}
{{getShippedTime() | date:'dd MMMM @ HH:mm:ss'}}
etc.
Я думал о создании настраиваемого фильтра (пусть его называют myDate
), который будет действовать как обертка, а затем передать строку даты в фильтр Angular date
с моим пользовательским форматом, поэтому мой код может выглядеть так:
{{systemTime | myDate}}
{{modifiedTime | myDate}}
{{getShippedTime() | myDate}}
etc.
Однако я не могу понять, как сделать точку фильтра myDate
фильтром Angular date
.
Спасибо за вашу помощь.
Ответы
Ответ 1
Основываясь на еще нескольких исследованиях, а затем рассмотрев комментарий moderndegree, я обнаружил, что следующий фильтр myDate
будет работать:
.filter('myDate', function($filter) {
var angularDateFilter = $filter('date');
return function(theDate) {
return angularDateFilter(theDate, 'dd MMMM @ HH:mm:ss');
}
});
Ответ 2
Попробуйте это
angular.module('yourmodule').filter('myDate', function($filter)
{
return function(input)
{
if(input == null){ return ""; }
var _date = $filter('date')(new Date(input), 'dd MMMM @ HH:mm:ss');
return _date.toUpperCase();
};
});
HTML
{{systemTime | myDate}}
Фильтрация и форматирование даты в Angular js.
Ответ 3
Используйте декоратор,
Это не то, о чем вы явно просили, используйте decorator. он построен в angular и предназначен для исправления services
, directives
, filters
и т.д.
в вашем случае, если фильтр даты не указан, вы должны использовать свой собственный формат даты.
app.config(function ($provide) {
$provide.decorator('dateFilter', function ($delegate) {
return function () {
// Check if the date format argument is not provided
if (!arguments[1]) {
arguments[1] = 'dd MMMM @ HH:mm:ss';
}
var value = $delegate.apply(null, arguments);
return value;
};
})
});
Ответ 4
format
по умолчанию mediumDate
, если ни один не указан. Нет ничего встроенного, чтобы иметь по умолчанию что-то еще.
https://github.com/angular/angular.js/blob/master/src/ng/filter/filters.js#L382
Ответ 5
Если вы работаете с страницами .aspx и имеете формат даты, хранящийся в файле конфигурации...
-
Из .aspx, который вводит вашу страницу Angular, установите глобальную переменную с форматом даты web.config
var _settingsDateFormat = '<% = appSettings.DateFormat% > ';
-
Установите глобальный фильтр, который будет использоваться через ваше приложение.
yourModule.filter('myDateFormat', function ($filter) {
return function (input) {
if (input == null) { return ""; }
var formattedDate = $filter('date')(new Date(input), _settingsDateFormat);
return formattedDate;
};
});
- Просто добавьте настраиваемый фильтр к вашим датам
Effective {{row.StartDate|myDateFormat}} - {{row.StopDate|myDateFormat}}