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
appendFilter
到服务名称时:
JS
HTML
今天有人提醒我这个问题,最近我不得不在一项服务中使用一些过滤器,我突然想到: 因为要向服务中注入过滤器,比如说我已经创建了
customDate
过滤器,我必须提供名称customDateFilter
,才能注入它
所以我想:
也许我可以像注册服务一样注册一个过滤器,但在名称后附加filter
,它就起作用了
我不知道以这种方式注册一个过滤器是否合法,或者将来它是否不会被删除
但这是一种允许您向提供商注册筛选器的方法
简短版本: 您可以注册一个可配置的过滤器,方法是创建一个
服务提供者
,创建通常的可配置服务->
但是当您注册ServiceProvider
appendFilter
到服务名称时:
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);