在AngularJs中的服务中注入dateFilter

Jul*_*ues 35 javascript angularjs angularjs-service

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

我一直在努力

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

    // ..... Some code

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

    // ..... Some code

}]);
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢 :)

Ste*_*wie 55

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

app.factory('myService', ['$rootScope', '$filter', function($rootScope, $filter) 
Run Code Online (Sandbox Code Playgroud)

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

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

$filter('date')(new Date(), 'yyyy-MM-01');
Run Code Online (Sandbox Code Playgroud)

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

var dateFilter = $filter('date');
var filteredDate = dateFilter(new Date(), 'yyyy-MM-01')
Run Code Online (Sandbox Code Playgroud)

  • 如果你正在缩小脚本,那就不够好了.使用`app.factory('educationService',['$ rootScope','$ filter',function($ rootScope,$ filter){...`)你总是安全的.看起来你使用了内联注释但是你忘了安全地注入数组中的实际依赖项. (2认同)

Mar*_*cok 46

过滤器功能是$injector在过滤器名称后面注册的Filter.- $ filterProvider docs

对于Angular内置过滤器以及您自己的自定义过滤器,情况都是如此.

所以,你可以dateFilter像这样注入你的服务(如果没有缩小):

app.factory('educationService', [function($rootScope, dateFilter) {
Run Code Online (Sandbox Code Playgroud)

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

  • +1感谢分享.我实际上并不知道. (2认同)
  • +1这个答案比@Stewie的选定答案更正确,因为这个答案提到了注入特定过滤器而不是整个`$ filter`服务的能力 (2认同)