是否可以像创建可配置服务一样创建可配置过滤器:
angular.module('app', [])
.constant('baseUrl', '...')
.filter('resourceUrl', ['baseUrl', function(baseUrl) {
return function resourceUrlFilter(url) { /* returns the new url */ }
}]
我不想创建一个过滤器,为路径字符串添加基本URL前缀,并且url前缀应该是可配置的。
目前我通过在过滤器中注入一个常量来实现这一点
{{1}}
答案 0 :(得分:0)
我今天提醒了这个问题,最近我不得不在服务中使用一些过滤器,这让我想到了:
由于要将过滤器注入服务,我们假设我已经创建了
customDateFilter
过滤器,我必须提供名称myModule.factory('MyData', function(customDateFilter) { /* code */ });
以便注入它
Filter
所以我想:
也许我可以像注册服务那样注册过滤器,但随后将
ServiceProvider
添加到名称并且有效。
我不知道以这种方式注册过滤器是否合法,或者是否将来不会被删除 但这是一种允许您使用提供者注册过滤器的方法
您可以通过创建ServiceProvider
创建常规可配置服务的方式来注册可配置过滤器 - > https://docs.angularjs.org/guide/providers#provider-recipe
但是当您向服务名称注册Filter
追加var module = angular.module('app', [])
var customDate = function filterProvider() { /* ServiceProvider definition */ };
myModule.provider('customDateFilter', customDate);
时:
<p>Some date: <span>{{ $ctrl.date | customDate }}</span> </p>
HTML
config
此plunk显示了可以配置的baseUrl过滤器的示例
模块的filter
块中的前缀
https://plnkr.co/edit/RkTkKM?p=preview
您始终可以创建一个执行过滤的服务,然后通过将其注入Provider Recipe
工厂将其公开。此服务可以是使用class FilteringServiceProvider {
$get() { return new FilteringService(this.configuration) }
configure(params) { /* some config logic */ }
}
class FilteringService {
constructor(configuration) {}
filterDate(date) { /* some filtering on the date and return a value */ }
}
const myModule = angular.module('app.filters', []);
myModule
.provider('filteringService', FilteringServiceProvider)
.filter('customDate', (filteringService) => filteringService.filterDate);
String monthName = 'january'
assert 42 == new MonthlyResult( january:42 )[ monthName ]