Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 4033cf2

Browse files
colincaseypetebacondarwin
authored andcommitted
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
1 parent 587e8e2 commit 4033cf2

File tree

2 files changed

+66
-2
lines changed

2 files changed

+66
-2
lines changed

src/ng/filter.js

+19-2
Original file line numberDiff line numberDiff line change
@@ -78,15 +78,32 @@ $FilterProvider.$inject = ['$provide'];
7878
function $FilterProvider($provide) {
7979
var suffix = 'Filter';
8080

81+
/**
82+
* @ngdoc function
83+
* @name ng.$controllerProvider#register
84+
* @methodOf ng.$controllerProvider
85+
* @param {string|Object} name Name of the filter function, or an object map of filters where
86+
* the keys are the filter names and the values are the filter factories.
87+
* @returns {Object} Registered filter instance, or if a map of filters was provided then a map
88+
* of the registered filter instances.
89+
*/
8190
function register(name, factory) {
82-
return $provide.factory(name + suffix, factory);
91+
if(isObject(name)) {
92+
var filters = {};
93+
forEach(name, function(filter, key) {
94+
filters[key] = register(key, filter);
95+
});
96+
return filters;
97+
} else {
98+
return $provide.factory(name + suffix, factory);
99+
}
83100
}
84101
this.register = register;
85102

86103
this.$get = ['$injector', function($injector) {
87104
return function(name) {
88105
return $injector.get(name + suffix);
89-
}
106+
};
90107
}];
91108

92109
////////////////////////////////////////

test/ng/filterSpec.js

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
'use strict';
2+
3+
describe('$filter', function() {
4+
var $filterProvider, $filter;
5+
6+
beforeEach(module(function(_$filterProvider_) {
7+
$filterProvider = _$filterProvider_;
8+
}));
9+
10+
beforeEach(inject(function(_$filter_) {
11+
$filter = _$filter_;
12+
}));
13+
14+
describe('provider', function() {
15+
it('should allow registration of filters', function() {
16+
var FooFilter = function() {
17+
return function() { return 'foo'; };
18+
};
19+
20+
$filterProvider.register('foo', FooFilter);
21+
22+
var fooFilter = $filter('foo');
23+
expect(fooFilter()).toBe('foo');
24+
});
25+
26+
it('should allow registration of a map of filters', function() {
27+
var FooFilter = function() {
28+
return function() { return 'foo'; };
29+
};
30+
31+
var BarFilter = function() {
32+
return function() { return 'bar'; };
33+
};
34+
35+
$filterProvider.register({
36+
'foo': FooFilter,
37+
'bar': BarFilter
38+
});
39+
40+
var fooFilter = $filter('foo');
41+
expect(fooFilter()).toBe('foo');
42+
43+
var barFilter = $filter('bar');
44+
expect(barFilter()).toBe('bar');
45+
});
46+
});
47+
});

0 commit comments

Comments
 (0)