¿Cómo extender o anular filtros existentes en angularjs?

¿Es posible ampliar los filtros “estándar” existentes ( date , number , lowercase , etc.)? En mi caso, necesito analizar la fecha del formato AAAAMMDDhhmmss, por lo que me gustaría extender (o anular) el filtro de date lugar de escribir el mío.

No estoy seguro si entiendo su pregunta correctamente, pero si desea ampliar la funcionalidad de los filtros existentes, podría crear un nuevo filtro que decore uno existente. Ejemplo:

 myApp.filter('customDate', function($filter) { var standardDateFilterFn = $filter('date'); return function(dateToFormat) { return 'prefix ' + standardDateFilterFn(dateToFormat, 'yyyyMMddhhmmss'); }; }); 

y luego, en tu plantilla:

 {{now | customDate}} 

Dicho lo anterior, si simplemente desea formatear una fecha de acuerdo con un formato dado, esto se puede hacer con el filtro de fecha existente:

 {{now | date:'yyyyMMddhhmmss'}} 

Aquí está el jsFiddle de trabajo que ilustra ambas técnicas: http://jsfiddle.net/pkozlowski_opensource/zVdJd/2/

Tenga en cuenta que si no se especifica un formato, AngularJS supondrá que se trata de un formato “medio” (el formato exacto depende de la configuración regional). Consulte http://docs.angularjs.org/api/ng.filter:date para obtener más información.

La última observación: estoy un poco confundido acerca de la parte de ” analizar de ” de su pregunta. Lo que ocurre es que los filtros se utilizan para analizar un objeto (fecha en este caso) en cadena y no viceversa. Si busca después de analizar cadenas (desde una entrada) que representan fechas, debería buscar en NgModelController # $ analizadores (consulte la parte “Validación personalizada” en http://docs.angularjs.org/guide/forms ).

Prefiero implementar el patrón de decorador , y en realidad en angular es muy fácil …
Entonces, si tomamos el ejemplo de @ pkozlowski.opensource, puedes hacer algo como eso:

  myApp.config(['$provide', function($provide) { $provide.decorator('dateFilter', ['$delegate', function($delegate) { var srcFilter = $delegate; var extendsFilter = function() { var res = srcFilter.apply(this, arguments); return arguments[2] ? res + arguments[2] : res; } return extendsFilter; }]) }]) 

Y luego en sus puntos de vista, puede usar tanto … la salida estándar como el comportamiento extendido.
con el mismo filtro

 

Standard output : {{ now | date:'yyyyMMddhhmmss' }}

External behavior : {{ now | date:'yyyyMMddhhmmss': ' My suffix' }}

Aquí está el jsFiddle de trabajo que ilustra ambas técnicas: http://jsfiddle.net/ar8m/9dg0hLho/