mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-20 16:30:26 +00:00
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
120 lines
3.6 KiB
JavaScript
120 lines
3.6 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* @ngdoc object
|
|
* @name ng.$filterProvider
|
|
* @description
|
|
*
|
|
* Filters are just functions which transform input to an output. However filters need to be Dependency Injected. To
|
|
* achieve this a filter definition consists of a factory function which is annotated with dependencies and is
|
|
* responsible for creating a filter function.
|
|
*
|
|
* <pre>
|
|
* // Filter registration
|
|
* function MyModule($provide, $filterProvider) {
|
|
* // create a service to demonstrate injection (not always needed)
|
|
* $provide.value('greet', function(name){
|
|
* return 'Hello ' + name + '!';
|
|
* });
|
|
*
|
|
* // register a filter factory which uses the
|
|
* // greet service to demonstrate DI.
|
|
* $filterProvider.register('greet', function(greet){
|
|
* // return the filter function which uses the greet service
|
|
* // to generate salutation
|
|
* return function(text) {
|
|
* // filters need to be forgiving so check input validity
|
|
* return text && greet(text) || text;
|
|
* };
|
|
* });
|
|
* }
|
|
* </pre>
|
|
*
|
|
* The filter function is registered with the `$injector` under the filter name suffix with `Filter`.
|
|
* <pre>
|
|
* it('should be the same instance', inject(
|
|
* function($filterProvider) {
|
|
* $filterProvider.register('reverse', function(){
|
|
* return ...;
|
|
* });
|
|
* },
|
|
* function($filter, reverseFilter) {
|
|
* expect($filter('reverse')).toBe(reverseFilter);
|
|
* });
|
|
* </pre>
|
|
*
|
|
*
|
|
* For more information about how angular filters work, and how to create your own filters, see
|
|
* {@link guide/dev_guide.templates.filters Understanding Angular Filters} in the angular Developer
|
|
* Guide.
|
|
*/
|
|
/**
|
|
* @ngdoc method
|
|
* @name ng.$filterProvider#register
|
|
* @methodOf ng.$filterProvider
|
|
* @description
|
|
* Register filter factory function.
|
|
*
|
|
* @param {String} name Name of the filter.
|
|
* @param {function} fn The filter factory function which is injectable.
|
|
*/
|
|
|
|
|
|
/**
|
|
* @ngdoc function
|
|
* @name ng.$filter
|
|
* @function
|
|
* @description
|
|
* Filters are used for formatting data displayed to the user.
|
|
*
|
|
* The general syntax in templates is as follows:
|
|
*
|
|
* {{ expression [| filter_name[:parameter_value] ... ] }}
|
|
*
|
|
* @param {String} name Name of the filter function to retrieve
|
|
* @return {Function} the filter function
|
|
*/
|
|
$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) {
|
|
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);
|
|
};
|
|
}];
|
|
|
|
////////////////////////////////////////
|
|
|
|
register('currency', currencyFilter);
|
|
register('date', dateFilter);
|
|
register('filter', filterFilter);
|
|
register('json', jsonFilter);
|
|
register('limitTo', limitToFilter);
|
|
register('lowercase', lowercaseFilter);
|
|
register('number', numberFilter);
|
|
register('orderBy', orderByFilter);
|
|
register('uppercase', uppercaseFilter);
|
|
}
|