一尘不染

如何扩展或覆盖angularjs中的现有过滤器?

angularjs

是否有可能扩展现有的“标准”过滤器(datenumberlowercase等)?在我的情况下,我需要从YYYYMMDDhhmmss格式解析日期,因此我想扩展(或覆盖)date过滤器,而不是编写自己的过滤器。


阅读 201

收藏
2020-07-04

共1个答案

一尘不染

我不确定我是否正确理解了您的问题,但是如果您想扩展现有过滤器的功能,则可以创建一个装饰现有过滤器的新过滤器。例:

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

然后,在您的模板中:

{{now | customDate}}

上面已经说了,如果您只是想根据给定的格式格式化日期,可以使用现有的日期过滤器来完成:

{{now | date:'yyyyMMddhhmmss'}}

这是说明两种技术的有效jsFiddle:http
:
//jsfiddle.net/pkozlowski_opensource/zVdJd/2/

请注意,如果未指定格式,AngularJS将假定它是“中等”格式(确切的格式取决于语言环境)。检查http://docs.angularjs.org/api/ng.filter:date了解更多信息。

最后一句话:我对您的问题的“解析来源”部分感到困惑。事实是,过滤器用于将对象(在这种情况下为日期)解析为字符串,而不是相反。如果要解析表示日期的字符串(来自输入),则必须查看NgModelController#$
parsers(检查http://docs.angularjs.org/guide/forms中的“自定义验证”部分)。

2020-07-04