在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学习笔记--$http数据渲染到表格路由依赖注入provider