【问题标题】:Inject dateFilter in a service in AngularJs在AngularJs的服务中注入dateFilter
【发布时间】: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 的文档中搜索,我发现对此没有任何帮助。

谢谢:)

【问题讨论】:

    标签: javascript angularjs angularjs-service


    【解决方案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 服务更好的方法。
    猜你喜欢
    • 2013-08-30
    • 2016-11-02
    • 2013-04-07
    • 2014-01-27
    • 2015-02-27
    • 1970-01-01
    • 2014-12-19
    • 2016-12-09
    相关资源
    最近更新 更多