mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-16 23:30:23 +00:00
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:
parent
587e8e2ba5
commit
4033cf2814
2 changed files with 66 additions and 2 deletions
|
|
@ -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
47
test/ng/filterSpec.js
Normal 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');
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Reference in a new issue