【问题标题】:RequireJS + Angular: Undefined app. Callback doesn't shootRequireJS + Angular:未定义的应用程序。回调不射击
【发布时间】:2015-02-13 10:50:17
【问题描述】:

我用这个简单的代码得到了 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);
});

如您所见,我尝试在 require 回调中获取应用程序。但我得到的都是未定义的。 这是我在 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;
});

所以问题: 在 main.js 回调中未定义的函数参数“mainApp”似乎是合乎逻辑的,因为 app.js 中的 console.log() 不会触发。谁能告诉我这是怎么回事?

【问题讨论】:

  • 你不应该在 main.js 中 require(['angular', 'app'], function(mainApp){...}) 代替吗?
  • 为什么? Angular 作为全局 throw shim 包含在内,并在 app.js 中作为参数传递。所以它不应该在 require 回调中未定义。也许我真的不明白你的问题。如果是这样,请纠正我。

标签: javascript angularjs module requirejs amd


【解决方案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

您可以自己显式命名模块,但它使模块 便携性较差——如果您将文件移动到另一个目录,您将 需要更改名称。通常最好避免在名称中编码 对于模块,只需让优化工具在模块中烧录 名字。优化工具需要添加名称,以便超过 一个模块可以捆绑在一个文件中,以便更快地加载 浏览器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    相关资源
    最近更新 更多