Angularjs 角度:如何制作可配置的过滤器

Angularjs 角度:如何制作可配置的过滤器,angularjs,angular-filters,Angularjs,Angular Filters,是否可以通过创建可配置服务的方式创建可配置过滤器: angular.module('app', []) .provider('resourceUrl', function($filterProvider) { var base = '/'; this.setPrefix = function(prefix) {base = prefix}; $filterProvider.register('resourceUrl', resourceUrlFilt

是否可以通过创建可配置服务的方式创建可配置过滤器:

angular.module('app', [])
       .provider('resourceUrl', function($filterProvider) { 

    var base = '/';

    this.setPrefix = function(prefix) {base = prefix};

    $filterProvider.register('resourceUrl', resourceUrlFilter);

    this.$get = ??

    function resourceUrlFilter(url) { /* returns the new url */ }
})
我不想创建一个过滤器,将基本url前缀添加到路径字符串中,并且url前缀应该是可配置的

目前,我通过在过滤器中注入一个常量来实现这一点

angular.module('app', [])
       .constant('baseUrl', '...')
       .filter('resourceUrl', ['baseUrl', function(baseUrl) {

       return function resourceUrlFilter(url) { /* returns the new url */ }
}]

今天有人提醒我这个问题,最近我不得不在一项服务中使用一些过滤器,我突然想到:

因为要向服务中注入过滤器,比如说我已经创建了
customDate
过滤器,我必须提供名称
customDateFilter
,才能注入它

所以我想:

也许我可以像注册服务一样注册一个过滤器,但在名称后附加
filter
它就起作用了

我不知道以这种方式注册一个过滤器是否合法,或者将来它是否不会被删除 但这是一种允许您向提供商注册筛选器的方法


简短版本: 您可以注册一个可配置的过滤器,方法是创建一个
服务提供者
,创建通常的可配置服务-> 但是当您注册
ServiceProvider
append
Filter
到服务名称时:

JS HTML
今天有人提醒我这个问题,最近我不得不在一项服务中使用一些过滤器,我突然想到:

因为要向服务中注入过滤器,比如说我已经创建了
customDate
过滤器,我必须提供名称
customDateFilter
,才能注入它

所以我想:

也许我可以像注册服务一样注册一个过滤器,但在名称后附加
filter
它就起作用了

我不知道以这种方式注册一个过滤器是否合法,或者将来它是否不会被删除 但这是一种允许您向提供商注册筛选器的方法


简短版本: 您可以注册一个可配置的过滤器,方法是创建一个
服务提供者
,创建通常的可配置服务-> 但是当您注册
ServiceProvider
append
Filter
到服务名称时:

JS HTML
您找到答案了吗?我认为不可能按照定义可配置服务的方式创建可配置过滤器。我想我使用了
injectconstant
解决方案。你找到答案了吗?我认为不可能按照定义可配置服务的方式创建可配置过滤器。我想我使用了
注入常量
解决方案
 myModule.factory('MyData', function(customDateFilter) { /* code */ });
var module = angular.module('app', [])
var customDate = function filterProvider() { /* ServiceProvider definition */ };
myModule.provider('customDateFilter', customDate);
<p>Some date: <span>{{ $ctrl.date | customDate }}</span> </p>
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);