0

真的为这个疯狂:

我正在尝试将 AngularJS 和 RequireJS 结合起来。经过几次失败的尝试后,我转向了AngularAMD。我遵循了基本流程,但我不断收到这个令人讨厌的错误:

无法实例化模块 ngStorage,原因是:模块 'ngStorage' 不可用!您要么拼错了模块名称,要么忘记加载它...

ngStorage是一个简单的 3rd 方 Angular 模块。

这是我的main.js

require.config({
  paths: {
    angular: 'js/angular.min',
    angularAMD: 'js/angularAMD.min',
    ngload: 'js/ngload.min',
    ngStorage: 'js/ngStorage.min'
  },
  shim: {
    angularAMD: ['angular'],
    ngload: ['angularAMD'],
    ngStorage: ['angular'] // Also tried with ['angularAMD'], and without this line at all
  },
  deps: ['js/app']
});

我的app.js

define(['angularAMD','ngStorage'], function(angularAMD) {
    var app = angular.module('tyleApp', ['ngStorage']);
    return angularAMD.bootstrap(app);   // Fails here...
});

我从应用程序中删除了所有其他内容,但在这里失败了......我做错了什么?

注意:我也尝试过:

define(['angularAMD','ngload!ngStorage'], function(angularAMD) {

但后来我得到:

angularAMD 未初始化。需要先调用 angularAMD.bootstrap(app)。

4

1 回答 1

0

ngStorage 已经定义了 AMD,所以你不需要为此编写 shim。

require.config({
  paths: {
    angular: 'js/angular.min',
    angularAMD: 'js/angularAMD.min',
    ngload: 'js/ngload.min',
    ngStorage: 'js/ngStorage.min'
  },
  shim: {
    angularAMD: ['angular'],
    ngload: ['angularAMD'],

  },
  deps: ['js/app']
});

并且在您的 app.js 中,在您的路径中保持相同的 ngStorage 名称,这个名称可能是不同的字符串,如果您将其命名为另一个,在您的情况下,您的 app.js 看起来不错。

例如,如果您在 paths 中使用另一个名称,比如说在 paths 中:
angularStorage: 'js/ngStorage.min'

您的 apps.js 将是:

define(['angularAMD','angularStorage'], function(angularAMD) {
    var app = angular.module('tyleApp', ['ngStorage']);
    return angularAMD.bootstrap(app);   
});

因此,您使用在 requireJS 中定义的 'angularStorage' ,并且 angular.module() 仍将使用在 ngStorage 源代码中定义的模块名称 'ngStorage' 。

于 2015-06-07T19:12:48.417 回答