feat(filter): allow map of filters to be registered

This feature adds similar functionality to what `$ControllerProvider.register`
and `$CompileProvider.directive` currently provide by allowing a map of filter
name/factories to be passed as the sole argument to `$FilterProvider.register`
to register all of the specified filters.

Closes #4036
Closes #4091
This commit is contained in:
Colin Casey 2013-09-21 01:24:39 -03:00 committed by Pete Bacon Darwin
parent 587e8e2ba5
commit 4033cf2814
2 changed files with 66 additions and 2 deletions

View file

@ -78,15 +78,32 @@ $FilterProvider.$inject = ['$provide'];
function $FilterProvider($provide) {
var suffix = 'Filter';
/**
* @ngdoc function
* @name ng.$controllerProvider#register
* @methodOf ng.$controllerProvider
* @param {string|Object} name Name of the filter function, or an object map of filters where
* the keys are the filter names and the values are the filter factories.
* @returns {Object} Registered filter instance, or if a map of filters was provided then a map
* of the registered filter instances.
*/
function register(name, factory) {
return $provide.factory(name + suffix, factory);
if(isObject(name)) {
var filters = {};
forEach(name, function(filter, key) {
filters[key] = register(key, filter);
});
return filters;
} else {
return $provide.factory(name + suffix, factory);
}
}
this.register = register;
this.$get = ['$injector', function($injector) {
return function(name) {
return $injector.get(name + suffix);
}
};
}];
////////////////////////////////////////

47
test/ng/filterSpec.js Normal file
View file

@ -0,0 +1,47 @@
'use strict';
describe('$filter', function() {
var $filterProvider, $filter;
beforeEach(module(function(_$filterProvider_) {
$filterProvider = _$filterProvider_;
}));
beforeEach(inject(function(_$filter_) {
$filter = _$filter_;
}));
describe('provider', function() {
it('should allow registration of filters', function() {
var FooFilter = function() {
return function() { return 'foo'; };
};
$filterProvider.register('foo', FooFilter);
var fooFilter = $filter('foo');
expect(fooFilter()).toBe('foo');
});
it('should allow registration of a map of filters', function() {
var FooFilter = function() {
return function() { return 'foo'; };
};
var BarFilter = function() {
return function() { return 'bar'; };
};
$filterProvider.register({
'foo': FooFilter,
'bar': BarFilter
});
var fooFilter = $filter('foo');
expect(fooFilter()).toBe('foo');
var barFilter = $filter('bar');
expect(barFilter()).toBe('bar');
});
});
});