Skip to content

Commit 65f0e71

Browse files
committed
Support use dynamic module
1 parent 2bd71ef commit 65f0e71

File tree

1 file changed

+47
-40
lines changed

1 file changed

+47
-40
lines changed

angular-async-loader.js

Lines changed: 47 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
function factory(angular, undefined) {
1111

12-
var VERSION = '1.2.1';
12+
var VERSION = '1.3.0';
1313

1414
// Support require.js, sea.js, system.js
1515
var amdRequire = (function() {
@@ -104,31 +104,50 @@
104104
*/
105105
configure: function(app) {
106106

107-
app.provider('$asyncLoader', [
108-
'$controllerProvider',
109-
'$compileProvider',
110-
'$provide',
111-
'$filterProvider',
112-
function($controllerProvider,
113-
$compileProvider,
114-
$provide,
115-
$filterProvider) {
107+
app.provider('ngProviders', ['$controllerProvider', '$compileProvider', '$filterProvider', '$provide',
108+
function($controllerProvider, $compileProvider, $filterProvider, $provide) {
116109
this.$get = function() {
117110
return {
118111
$controllerProvider: $controllerProvider,
119112
$compileProvider: $compileProvider,
120-
$provide: $provide,
121-
$filterProvider: $filterProvider
113+
$filterProvider: $filterProvider,
114+
$provide: $provide
122115
};
123116
};
124117
}
125118
]);
126119

127-
app.run(['$asyncLoader', function($asyncLoader) {
128-
var $controllerProvider = $asyncLoader.$controllerProvider;
129-
var $compileProvider = $asyncLoader.$compileProvider;
130-
var $provide = $asyncLoader.$provide;
131-
var $filterProvider = $asyncLoader.$filterProvider;
120+
app.run(['ngProviders', '$injector', function(ngProviders, $injector) {
121+
var $controllerProvider = ngProviders.$controllerProvider;
122+
var $compileProvider = ngProviders.$compileProvider;
123+
var $filterProvider = ngProviders.$filterProvider;
124+
var $provide = ngProviders.$provide;
125+
126+
/**
127+
* Register an angular module for dependency.
128+
*
129+
* @param {String} name - module name
130+
*/
131+
app.useModule = function (name) {
132+
var module = angular.module(name);
133+
if (module.requires) {
134+
for (var i = 0; i < module.requires.length; i++) {
135+
app.addModule(module.requires[i]);
136+
}
137+
}
138+
angular.forEach(module._invokeQueue, function(invokeArgs) {
139+
var provider = ngProviders[invokeArgs[0]];
140+
provider[invokeArgs[1]].apply(provider, invokeArgs[2]);
141+
});
142+
angular.forEach(module._configBlocks, function(fn) {
143+
$injector.invoke(fn);
144+
});
145+
angular.forEach(module._runBlocks, function(fn) {
146+
$injector.invoke(fn);
147+
});
148+
149+
return app;
150+
};
132151

133152
app.value = function(name, value) {
134153
$provide.value(name, value);
@@ -174,6 +193,17 @@
174193
$provide.provider(name, service);
175194
return app;
176195
};
196+
197+
/**
198+
* Get angular injector object by name in module scope.
199+
*
200+
* @param {String} name
201+
* @returns {*} the injected object
202+
*/
203+
app.get = function(name) {
204+
return $injector.get(name);
205+
};
206+
177207
}]);
178208

179209
// rewrite $routeProvider.when
@@ -194,29 +224,6 @@
194224
};
195225
}]);
196226
}
197-
198-
199-
var injector;
200-
201-
/**
202-
* Get angular injector object by name in module scope.
203-
*
204-
* @param {String} name
205-
* @returns {*} the injected object
206-
*/
207-
app.get = function(name) {
208-
if (injector === undefined) {
209-
var elements = [app.element, document, 'html', 'body'];
210-
for (var i = 0; i < elements.length; i++) {
211-
injector = angular.element(elements[i]).injector();
212-
if (injector !== undefined) {
213-
break;
214-
}
215-
}
216-
}
217-
return injector.get(name);
218-
};
219-
220227
}
221228
};
222229
}

0 commit comments

Comments
 (0)