RequireJS + Angular:未定义的应用程序。回叫不射击

时间:2014-12-15 10:52:14

标签: javascript angularjs module requirejs amd

我用这个简单的代码获得了main.js:

'use strickt';

require.config({

  paths: {
    'angular'        : 'libs/angular'          ,
    'angular-router' : 'libs/angular-route'    ,
  },
  shim : {
    'angular' : {
      exports : 'angular'
    },
    'angular-router' : {
      deps: ['angular']
    }
  }

});

require(['app'], function (mainApp) {
  console.log(mainApp);
});

如您所见,我尝试在需要回调中获取应用程序。但我得到的都是未定义的。 这是我在app.js文件中得到的内容:

define('mainApp', ['angular', 'angular-route'], function (angular) {
  var app = angular.module('mainApp', ['ngRoute']);
  console.log('should be fired from app.js');
  return app;
});

所以问题是: 函数参数'mainApp'作为main.js回调中的未定义似乎是合乎逻辑的,因为app.js中的console.log()不会拍摄。有人可以告诉我它有什么问题吗?

1 个答案:

答案 0 :(得分:1)

只需删除app.js文件中的模块名称(或将其更改为“app”)。你app.js文件看起来像:

define(['angular', 'angular-route'], function (angular) {
  var app = angular.module('mainApp', ['ngRoute']);
  console.log('should be fired from app.js');
  return app;
});
  

http://requirejs.org/docs/api.html#modulename

     

您可以自己明确命名模块,但它会生成模块   不太便携 - 如果您将文件移动到另一个目录,您将   需要更改名称。通常最好避免使用名称进行编码   对于模块,只需让优化工具在模块中刻录   名。优化工具需要添加名称以便更多   一个模块可以捆绑在一个文件中,以便更快地加载   浏览器。