Подтвердить что ты не робот

Установите формат фильтра 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.

Спасибо за вашу помощь.

4b9b3361

Ответ 1

Основываясь на еще нескольких исследованиях, а затем рассмотрев комментарий moderndegree, я обнаружил, что следующий фильтр myDate будет работать:

.filter('myDate', function($filter) {    
    var angularDateFilter = $filter('date');
    return function(theDate) {
       return angularDateFilter(theDate, 'dd MMMM @ HH:mm:ss');
    }
});

Ответ 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;
        };
    })
});

Ответ 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;
        };
});
  1. Просто добавьте настраиваемый фильтр к вашим датам

       Effective {{row.StartDate|myDateFormat}} - {{row.StopDate|myDateFormat}}