¿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 date
en lugar de escribir el mío.¿Cómo extender o anular filtros existentes en angularjs?
Respuesta
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 su plantilla:
{{now | customDate}}
Una vez dicho lo anterior, si simplemente desea dar formato a una fecha de acuerdo con un formato determinado esto se puede hacer con el filtro de la fecha actual :
{{now | date:'yyyyMMddhhmmss'}}
Aquí es el jsFiddle de trabajo que ilustra las dos 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 una configuración regional). Compruebe http://docs.angularjs.org/api/ng.filter:date para más.
La última observación: Estoy un poco confundido acerca de la parte de la pregunta 'analizar'. 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 para implementar el decorator pattern, y de hecho en angular es muy fácil ..
Así, si tomamos @ pkozlowski.opensource ejemplo, se puede hacer algo así:
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 ambos ... el resultado estándar y el comportamiento extendido.
con el mismo filtro
<p>Standard output : {{ now | date:'yyyyMMddhhmmss' }}</p>
<p>External behavior : {{ now | date:'yyyyMMddhhmmss': ' My suffix' }}</p>
Aquí es el jsFiddle trabajo ilustrando las dos técnicas: http://jsfiddle.net/ar8m/9dg0hLho/
Esto es absolutamente 100% exactamente lo que necesitaba. Si pudiera, te votaría tres veces. –
Esta es la respuesta correcta. Pero recuerda que tienes que agregar '' 'Filter''' para filtros para obtenerlos. Volver a crear un filtro con el mismo nombre también está bien para mí, ya que generalmente (¿siempre?) Es una función única, vas a cambiar de cualquier forma. –
Gran enfoque. q: el primer parametro de 'srcFilter.apply (...)' es 'this', sin embargo, vi otros ejemplos de que el primer param es' null'. ¿Cuál es su propósito? –
- 1. ¿Cómo extender objetos de enumeraciones existentes en Scala?
- 2. Anular una función sin extender la clase
- 3. Filtros de Log4Net "O"
- 4. cómo extender LoginUrlAuthenticationEntryPoint o cómo implementar AuthenticationEntryPoint
- 5. Cómo borrar un filtro - AngularJS
- 6. Autorizar filtros vs filtros de acción
- 7. Cómo desactivar o anular SQL_CALC_FOUND_ROWS de phpmyadmin
- 8. Anular copiar o copiarWithZone: ¿o ambos?
- 9. BroadcastReceiver con múltiples filtros o múltiples BroadcastReceivers?
- 10. ¿Cómo reinicio o anulo los filtros CSS de IE?
- 11. Cómo extender los protocolos numéricos en Clojure
- 12. ¿Cómo hacen Instagram o Hipstamatic los filtros de fotos?
- 13. Pass FileSystemObject existentes o crear varias instancias
- 14. AngularJS Test Example
- 15. Cómo anular @GeneratedValue declarado en superclase mapeada?
- 16. Posible extender la clase String en .net
- 17. Campos ocultos en AngularJs
- 18. ¿Cómo podría (o debería) extender Modernizr.load() para precargar imágenes?
- 19. Ejemplo de AngularJS en backbone.js y/o knockout.js
- 20. Eliminar o reemplazar las rutas existentes en RouteTable
- 21. "Propiedades calculadas" en AngularJS
- 22. ¿Cómo puede una clase anónima usar "extender" o "implementar"?
- 23. Cómo extender espacios de nombres con EmberJS
- 24. Filtros en Python3
- 25. ¿Cómo extender un widget jquery ui? (1.7)
- 26. Anular o sobrecargar Autocompletar Agregar regla
- 27. directivas dinámicas en angularjs
- 28. ¿Cómo extender ImageButton correctamente?
- 29. Cómo AngularJS Fecha de json
- 30. Cómo probar las directivas AngularJS
De acuerdo con la documentación actualizada del filtro puede aceptar fechas como ISO 8601 cuerdas formateados. En mi caso, el formato de entrada es 'aaaaMMddHHmmss' para que el filtro estándar 'date' no pueda analizarlo. – coxx