diff options
| author | Colin Casey | 2013-09-21 01:24:39 -0300 |
|---|---|---|
| committer | Pete Bacon Darwin | 2013-10-01 10:26:36 +0100 |
| commit | 4033cf28142664c52aa7b4bc95340ac913397ac8 (patch) | |
| tree | 923a8e8d555feb24d4241617ff5aea4c4df5fe19 | |
| parent | 587e8e2ba5feb275f14d259afb72ae6b77dfef18 (diff) | |
| download | angular.js-4033cf28142664c52aa7b4bc95340ac913397ac8.tar.bz2 | |
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
| -rw-r--r-- | src/ng/filter.js | 21 | ||||
| -rw-r--r-- | test/ng/filterSpec.js | 47 |
2 files changed, 66 insertions, 2 deletions
diff --git a/src/ng/filter.js b/src/ng/filter.js index 5c6ffd0f..f41efbd9 100644 --- a/src/ng/filter.js +++ b/src/ng/filter.js @@ -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); - } + }; }]; //////////////////////////////////////// diff --git a/test/ng/filterSpec.js b/test/ng/filterSpec.js new file mode 100644 index 00000000..fc0571cb --- /dev/null +++ b/test/ng/filterSpec.js @@ -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'); + }); + }); +});
\ No newline at end of file |
