在AngularJs的服务中注入dateFilter

Posted

技术标签:

【中文标题】在AngularJs的服务中注入dateFilter【英文标题】:Inject dateFilter in a service in AngularJs 【发布时间】:2013-03-02 17:55:21 【问题描述】:

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

我一直在努力

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

    // ..... Some code

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

    // ..... Some code

]);

所以我想知道是否可以在服务中注入过滤器,或者是否可以通过其他方式访问它。

如果你有一个关于这一点的文档的链接,那就太好了:) 一直在 Angular 的文档中搜索,我发现对此没有任何帮助。

谢谢:)

【问题讨论】:

【参考方案1】:

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

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

(只有在构建过程中使用缩小时才需要该数组)

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

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

$filter(name)返回特定的过滤器函数,然后您可以使用您的参数调用它:

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

【讨论】:

您好,谢谢您的回复。我在搜索时尝试过,但出现错误“$filter 不是函数”,所以我认为这是错误的。我要检查发生了什么事。也许缺少依赖或类似的东西。在我的示例中通过 $filter 的方式好吗? 如果您要缩小脚本还不够好。使用app.factory('educationService', ['$rootScope', '$filter', function($rootScope, $filter) ...,您将永远安全。您似乎使用了内联注释,但您忘记在数组中安全注入实际依赖项。 是的,我缩小了我的脚本。感谢您提供的信息,它现在可以完美运行:) 谢谢! AngularJS 文档似乎不正确。它们显示以下内容:$filter('date', object)【参考方案2】:

过滤器函数注册在$injector后缀为Filter的过滤器名称下。 -- $filterProvider docs

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

因此,您可以像这样将dateFilter 注入您的服务中(如果没有缩小):

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

如果您只使用一个过滤器,则此方法可以让您更具体地了解您的实际依赖关系。如果需要使用多个过滤器,可以像@Stewie 节目一样注入$filter

【讨论】:

+1 这个答案比@Stewie 选择的答案更正确,因为这个答案提到了注入特定过滤器而不是整个$filter 服务的能力 +1 我一直在使用filterDate 而不是dateFilter。这就是我一直在寻找的,我知道必须有比注入整个 $filter 服务更好的方法。

以上是关于在AngularJs的服务中注入dateFilter的主要内容,如果未能解决你的问题,请参考以下文章

在 AngularJS/Jasmine 中注入 Mock 服务

AngularJS服务及注入--Provider

angularjs学习笔记--$http数据渲染到表格路由依赖注入provider

AngularJS 和 Typescript - 注入其他服务的服务未定义

基于特征检测的AngularJS服务注入

AngularJS(15)-依赖注入