Generally, I\'d do the following and there would be an ng-app
in my HTML:
var myApp = angular.module(\"myApp\", []);
myApp.controller(\"AttributeCt
Updated
They updated the documentation and now it reads like this
Each item in the array should be the name of a predefined module or a (DI annotated) function that will be invoked by the injector as a run block. See: {@link angular.module modules}
It seems a bug.
The way you implemented to retrieve the module is correct. Just quote it from the doc to make it clear since it may not be well-known.
When passed two or more arguments, a new module is created. If passed only one argument, an existing module (the name passed as the first argument to module) is retrieved.
For the problem you mentioned, long story short...
The bootstrap
function calls createInjector
with the module list ['ng', ['ngLocale', function(){...}] , 'myApp']
(the last one is the module you passed in)
function bootstrap(element, modules) {
...
var injector = createInjector(modules);
Inside createInjector()
, it calls loadModules
for each module passed in
function createInjector(modulesToLoad) {
forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); });
And loadModules
calls angularModule
, which is initialized as angularModule = setupModuleLoader(window);
, which creates the object window.angular.module
function loadModules(modulesToLoad){
....
var moduleFn = angularModule(module); // triggers the error
The the error occurs, since angularModule
takes 2nd parameter as requires
. Without it, it will throws an exception on this line (line 1148) throw Error('No module: ' + name);
Reported: https://github.com/angular/angular.js/issues/3692