diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Injector.js | 12 | ||||
| -rw-r--r-- | src/angular-mocks.js | 2 | ||||
| -rw-r--r-- | src/loader.js | 48 |
3 files changed, 47 insertions, 15 deletions
diff --git a/src/Injector.js b/src/Injector.js index c9901513..cebc6eed 100644 --- a/src/Injector.js +++ b/src/Injector.js @@ -272,7 +272,7 @@ function createInjector(modulesToLoad) { })); - loadModules(modulesToLoad); + forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); }); return instanceInjector; @@ -318,15 +318,16 @@ function createInjector(modulesToLoad) { // Module Loading //////////////////////////////////// function loadModules(modulesToLoad){ + var runBlocks = []; forEach(modulesToLoad, function(module) { if (loadedModules.get(module)) return; loadedModules.put(module, true); if (isString(module)) { var moduleFn = angularModule(module); - loadModules(moduleFn.requires); + runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); try { - for(var invokeQueue = moduleFn.invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) { + for(var invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) { var invokeArgs = invokeQueue[i], provider = invokeArgs[0] == '$injector' ? providerInjector @@ -340,14 +341,14 @@ function createInjector(modulesToLoad) { } } else if (isFunction(module)) { try { - providerInjector.invoke(module); + runBlocks.push(providerInjector.invoke(module)); } catch (e) { if (e.message) e.message += ' from ' + module; throw e; } } else if (isArray(module)) { try { - providerInjector.invoke(module); + runBlocks.push(providerInjector.invoke(module)); } catch (e) { if (e.message) e.message += ' from ' + String(module[module.length - 1]); throw e; @@ -356,6 +357,7 @@ function createInjector(modulesToLoad) { assertArgFn(module, 'module'); } }); + return runBlocks; } //////////////////////////////////// diff --git a/src/angular-mocks.js b/src/angular-mocks.js index 3c74cf9b..3bc31989 100644 --- a/src/angular-mocks.js +++ b/src/angular-mocks.js @@ -1287,7 +1287,7 @@ angular.module('ngMock', ['ng']).service({ * Currently there is only one mock present in this module - * the {@link angular.module.ngMockE2E.$httpBackend e2e $httpBackend} mock. */ -angular.module('ngMockE2E', ['ng']).init(function($provide) { +angular.module('ngMockE2E', ['ng']).config(function($provide) { $provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator); }); diff --git a/src/loader.js b/src/loader.js index 3d5edd31..e6662aae 100644 --- a/src/loader.js +++ b/src/loader.js @@ -58,7 +58,7 @@ function setupModuleLoader(window) { * {@link angular.Module#init Module.init()}. * @return {angular.Module} */ - return function module(name, requires, initFn) { + return function module(name, requires, configFn) { if (requires && modules.hasOwnProperty(name)) { modules[name] = null; } @@ -70,10 +70,17 @@ function setupModuleLoader(window) { /** @type {!Array.<Array.<*>>} */ var invokeQueue = []; - var init = invokeLater('$injector', 'invoke'); + /** @type {!Array.<Function>} */ + var runBlocks = []; + + var config = invokeLater('$injector', 'invoke'); /** @type {angular.Module} */ var moduleInstance = { + // Private state + _invokeQueue: invokeQueue, + _runBlocks: runBlocks, + /** * @ngdoc property * @name angular.Module#requires @@ -83,7 +90,16 @@ function setupModuleLoader(window) { * Holds the list of modules which the injector will load before the current module is loaded. */ requires: requires, - invokeQueue: invokeQueue, + + /** + * @ngdoc property + * @name angular.Module#name + * @propertyOf angular.Module + * @returns {string} Name of the module. + * @description + */ + name: name, + /** * @ngdoc method @@ -131,18 +147,32 @@ function setupModuleLoader(window) { /** * @ngdoc method - * @name angular.Module#init + * @name angular.Module#config * @methodOf angular.Module - * @param {Function} initializationFn Execute this function on module load, allowing it to do any - * service configuration.. + * @param {Function} initializationFn Execute this function on module load. Useful for + * service configuration. * @description * Use this method to register work which needs to be performed on module loading. */ - init: init + config: config, + + /** + * @ngdoc method + * @name angular.Module#run + * @methodOf angular.Module + * @param {Function} initializationFn Execute this function after injector creation. + * Useful for application initialization. + * @description + * Use this method to register work which needs to be performed on module loading. + */ + run: function(block) { + runBlocks.push(block); + return this; + } }; - if (initFn) { - init(initFn); + if (configFn) { + config(configFn); } return moduleInstance; |
