Como estender ou replace filtros existentes em angularjs?

É possível estender os filtros “padrão” existentes ( date , number , lowercase , etc)? No meu caso, preciso analisar a data do formato YYYYMMDDhhmmss, portanto, gostaria de estender (ou replace) o filtro de date vez de escrever o meu.

Não tenho certeza se entendi sua pergunta corretamente, mas se você quiser estender a funcionalidade dos filtros existentes, crie um novo filtro que decore um filtro existente. Exemplo:

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

e, em seguida, no seu modelo:

 {{now | customDate}} 

Tendo dito o acima, se você simplesmente deseja formatar uma data de acordo com um determinado formato, isso pode ser feito com o filtro de data existente:

 {{now | date:'yyyyMMddhhmmss'}} 

Aqui está o jsFiddle de trabalho ilustrando ambas as técnicas: http://jsfiddle.net/pkozlowski_opensource/zVdJd/2/

Por favor, note que se um formato não for especificado, o AngularJS assumirá que este é o formato ‘médio’ (o formato exato depende de uma localidade). Verifique http://docs.angularjs.org/api/ng.filter:date para saber mais.

A última observação: Estou um pouco confuso sobre a parte de sua pergunta. A questão é que os filtros são usados ​​para analisar um object (data, neste caso) para string e não para vice-versa. Se você estiver após a análise de strings (a partir de uma input) que representa as datas, você deverá procurar NgModelController # $ parsers (verifique a parte “Custom Validation” em http://docs.angularjs.org/guide/forms ).

Eu prefiro implementar o padrão decorador , e na verdade em angular é muito fácil ..
Então, se pegarmos o exemplo @ pkozlowski.opensource, você pode fazer algo assim:

  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; }]) }]) 

E, em seguida, em suas visualizações, você pode usar ambas: a saída padrão e o comportamento estendido.
com o mesmo filtro

 

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

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

Aqui está o jsFiddle de trabalho ilustrando as duas técnicas: http://jsfiddle.net/ar8m/9dg0hLho/