parse - filtros personalizados en angularjs
¿Establecer un formato de filtro de fecha AngularJS para ser utilizado por todas las referencias al filtro de fecha? (5)
En lugar de tener que definir un formato personalizado para cada llamada al filtro de date
, ¿hay una manera de definir globalmente un formato predeterminado (que no sea ''medium''
)?
Me gustaría tener el formato configurado en un archivo en lugar de en todo el lugar de mi código (el formato de la fecha puede cambiarse en el futuro y una modificación en un archivo sería mucho mejor que tener que realizar cambios en muchos archivos) ).
Esto es lo que estoy haciendo ahora (definiendo el formato de fecha cada vez):
{{systemTime | date:''dd MMMM @ HH:mm:ss''}}
{{modifiedTime | date:''dd MMMM @ HH:mm:ss''}}
{{getShippedTime() | date:''dd MMMM @ HH:mm:ss''}}
etc.
Estaba pensando en crear un filtro personalizado (llamémoslo myDate
), que actuaría como un contenedor y luego pasaría la cadena de date
filtro de date
Angular con mi formato personalizado, por lo que mi código podría tener este aspecto:
{{systemTime | myDate}}
{{modifiedTime | myDate}}
{{getShippedTime() | myDate}}
etc.
Sin embargo, no puedo averiguar cómo hacer que el filtro myDate
apunte al filtro de date
angular.
Gracias por tu ayuda.
Usa un decorador,
No es lo que pediste explícitamente, usa un decorator . está construido en angular y diseñado para parchear services
, directives
, filters
, etc.
en su caso, si no se proporciona el filtro de fecha, debe usar su formato de fecha personalizado.
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;
};
})
});
Basándome en un poco más de investigación y luego considerando el comentario de moderndegree, he encontrado que el siguiente filtro myDate
funcionará:
.filter(''myDate'', function($filter) {
var angularDateFilter = $filter(''date'');
return function(theDate) {
return angularDateFilter(theDate, ''dd MMMM @ HH:mm:ss'');
}
});
El format
predeterminado es mediumDate
si no se proporciona ninguno. No hay nada incorporado para tenerlo por defecto a otra cosa.
https://github.com/angular/angular.js/blob/master/src/ng/filter/filters.js#L382
En caso de que esté trabajando con páginas .aspx y tenga el formato de fecha almacenado en un archivo de configuración ...
Desde el archivo .aspx que inyecta su página Angular, establezca una variable global con el formato de fecha web.config
var _settingsDateFormat = ''<% = appSettings.DateFormat%>'';
Configura un filtro global para usar a través de tu aplicación
yourModule.filter(''myDateFormat'', function ($filter) {
return function (input) {
if (input == null) { return ""; }
var formattedDate = $filter(''date'')(new Date(input), _settingsDateFormat);
return formattedDate;
};
});
- Solo agrega el filtro personalizado a tus fechas
Effective {{row.StartDate|myDateFormat}} - {{row.StopDate|myDateFormat}}
Prueba esto
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}}