2013-03-14 75 views
34

我想知道是否有方法在AngularJs的服务中注入过滤器。在AngularJs的服务中注入dateFilter

我一直在试图

app.factory('educationService', [function($rootScope, $filter) { 

    // ..... Some code 

    // What I want 
    console.log(dateFilter(new Date(), 'yyyy-MM-01')); 

    // ..... Some code 

}]); 

所以我想知道是否有可能注入的服务过滤器或也许是另一种方式访问​​。

如果你有一个关于这一点的文档的链接,这将是非常好的:)在Angular的文档中搜索,我发现没有什么真正有用的。

谢谢:)

回答

53

首先,你必须注入这样的过滤器:

app.factory('myService', ['$rootScope', '$filter', function($rootScope, $filter) 

(当您在构建过程中使用缩小时,才需要阵列)

要调用特定以编程方式过滤:

$filter('date')(new Date(), 'yyyy-MM-01'); 

$filter(name) re打开特定的过滤功能,你可以比你的论点拨打:

var dateFilter = $filter('date'); 
var filteredDate = dateFilter(new Date(), 'yyyy-MM-01') 
+1

你好,谢谢你的回复。我在搜索时尝试了它,但出现错误“$ filter不是函数”,所以我认为这是错误的。我要检查发生了什么。也许是失去依赖或类似的东西。 是否在我的示例中传递$ filter的方式很好? – 2013-03-14 13:10:36

+2

如果您正在缩小脚本,则不够好。你总是可以用'app.factory('educationService',['$ rootScope','$ filter',function($ rootScope,$ filter){...')来保证安全,看起来你使用了内联注释,但是你忘了安全地注入数组中的实际依赖关系 – Stewie 2013-03-14 13:17:54

+0

是的,我缩小了我的脚本,感谢它现在完美的信息:) – 2013-03-14 13:23:17

45

过滤功能与Filter后缀过滤器名称下的$injector注册。 - $filterProvider docs

这对于Angular内置过滤器以及您自己的自定义过滤器都是如此。

所以,你可以注入dateFilter为您服务是这样的(如果不是涅槃):

app.factory('educationService', [function($rootScope, dateFilter) { 

如果你只使用一个过滤器,这种方法可以让你具体谈谈您的实际依赖。如果你需要使用多个过滤器,你可以像@Stewie展示那样注入$filter

+2

+1感谢分享。我其实并不知道。 – Stewie 2013-03-15 08:22:57

+0

谢谢分享:) – 2013-03-15 10:27:54

+2

+1这个答案比@Stewie选择的答案更正确,因为这个提到了注入特定过滤器而不是整个'$ filter'服务的能力 – tsemer 2015-05-26 09:59:00