AngularAMD + RequireJS:无法实例化模块ngStorage

时间:2015-06-02 12:44:17

标签: javascript angularjs requirejs angular-amd ng-storage

对这一个真的变得疯狂:

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

  

由于以下原因导致无法实例化模块ngStorage:   模块'ngStorage'不可用!您要么错误拼写了模块名称,要么忘记加载它......

ngStorage是一个简单的第三方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)。

1 个答案:

答案 0 :(得分:0)

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

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看起来很好。

e.g。如果您在路径中使用其他名称,请说, 在路径中:
    angularStorage: 'js/ngStorage.min'

你的apps.js将是:

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

所以,你使用' angularStorage'正如您在requireJS中定义的那样,angular.module()仍将使用模块名称' ngStorage' ,这是在ngStorage源代码中定义的。