2 * @license AngularJS v0.10.6-5cdfe45a
3 * (c) 2010-2012 AngularJS http://angularjs.org
11 * @name angular.Module
14 * Interface for configuring angular {@link angular.module modules}.
17 function setupModuleLoader(window) {
19 function ensure(obj, name, factory) {
20 return obj[name] || (obj[name] = factory());
23 return ensure(ensure(window, 'angular', Object), 'module', function() {
24 /** @type {Object.<string, angular.Module>} */
29 * @name angular.module
32 * The `angular.module` is a global place for registering angular modules. All modules
33 * (angular core or 3rd party) that should be available to an application must be registered using this mechanism.
37 * A module is a collocation of services, directives, filters, and configure information. Module is used to configure the,
38 * {@link angular.module.AUTO.$injector $injector}.
41 * // Create a new module
42 * var myModule = angular.module('myModule', []);
44 * // configure a new service
45 * myModule.value('appName', 'MyCoolApp');
47 * // configure existing services inside initialization blocks.
48 * myModule.init(function($locationProvider) {
49 * // Configure existing providers
50 * $locationProvider.hashPrefix = '!';
54 * Then you can load your module like this:
57 * var injector = angular.injector(['ng', 'MyModule'])
60 * @param {!string} name The name of the module to create or retrieve.
61 * @param {Array.<string>=} requires If specified then new module is being created. If unspecified then the
62 * the module is being retrieved for further configuration.
63 * @param {Function} initFn Option configuration function for the module. Same as
64 * {@link angular.Module#init Module.init()}.
65 * @return {angular.Module}
67 return function module(name, requires, configFn) {
68 if (requires && modules.hasOwnProperty(name)) {
71 return ensure(modules, name, function() {
73 throw Error('No module: ' + name);
76 /** @type {!Array.<Array.<*>>} */
79 /** @type {!Array.<Function>} */
82 var config = invokeLater('$injector', 'invoke');
84 /** @type {angular.Module} */
85 var moduleInstance = {
87 _invokeQueue: invokeQueue,
88 _runBlocks: runBlocks,
92 * @name angular.Module#requires
93 * @propertyOf angular.Module
94 * @returns {Array.<string>} List of module names which must be loaded before this module.
96 * Holds the list of modules which the injector will load before the current module is loaded.
102 * @name angular.Module#name
103 * @propertyOf angular.Module
104 * @returns {string} Name of the module.
112 * @name angular.Module#service
113 * @methodOf angular.Module
114 * @param {string} name service name
115 * @param {Function} providerType Construction function for creating new instance of the service.
117 * See {@link angular.module.AUTO.$provide#service $provide.service()}.
119 service: invokeLater('$provide', 'service'),
123 * @name angular.Module#factory
124 * @methodOf angular.Module
125 * @param {string} name service name
126 * @param {Function} providerFunction Function for creating new instance of the service.
128 * See {@link angular.module.AUTO.$provide#service $provide.factory()}.
130 factory: invokeLater('$provide', 'factory'),
134 * @name angular.Module#value
135 * @methodOf angular.Module
136 * @param {string} name service name
137 * @param {*} object Service instance object.
139 * See {@link angular.module.AUTO.$provide#value $provide.value()}.
141 value: invokeLater('$provide', 'value'),
145 * @name angular.Module#filter
146 * @methodOf angular.Module
147 * @param {string} name filterr name
148 * @param {Function} filterFactory Factory function for creating new instance of filter.
150 * See {@link angular.module.ng.$filterProvider#register $filterProvider.register()}.
152 filter: invokeLater('$filterProvider', 'register'),
156 * @name angular.Module#config
157 * @methodOf angular.Module
158 * @param {Function} initializationFn Execute this function on module load. Useful for
159 * service configuration.
161 * Use this method to register work which needs to be performed on module loading.
167 * @name angular.Module#run
168 * @methodOf angular.Module
169 * @param {Function} initializationFn Execute this function after injector creation.
170 * Useful for application initialization.
172 * Use this method to register work which needs to be performed on module loading.
174 run: function(block) {
175 runBlocks.push(block);
184 return moduleInstance;
187 * @param {string} provider
188 * @param {string} method
189 * @returns {angular.Module}
191 function invokeLater(provider, method) {
193 invokeQueue.push([provider, method, arguments]);
194 return moduleInstance;
205 * Closure compiler type information
208 * requires: !Array.<string>,
209 * invokeQueue: !Array.<Array.<*>>,
211 * service: function(string, Function):angular.Module,
212 * factory: function(string, Function):angular.Module,
213 * value: function(string, *):angular.Module,
215 * filter: function(string, Function):angular.Module,
217 * init: function(Function):angular.Module