问题 带有require.js的angular.js得到Uncaught错误:[$ injector:modulerr]


我试图使用require.js与Main.js并获得以下错误:

未捕获的错误:[$ injector:modulerr] http://errors.angularjs.org/1.2.0rc1/$喷油器/ modulerr?P0 = MyApp的&P1 =错误%3 ... 3A8080%2FResults%2Fresources%2Fjs%2Fvendor%2Fangular.min.js%3A31%3A252)

我的Main.js

 require.config({

    // alias libraries paths
    paths: {
        'angular': 'vendor/angular.min',
        'jquery': 'vendor/jquery-1.8.0-min',
        'angularroute': 'vendor/angular-route'          
    },

    // angular does not support AMD out of the box, put it in a shim
    shim: {
        'angular': {
            deps: ['jquery'],
            exports: 'angular'
        },
        'angularroute':{
            deps:['angular']
        }

    }
});
require([
         'angular',
         'angularroute',
         'app'
         ],
        function(angular, angularroute, app){
    'use strict';       
})

我的app.js.

define(['angular'], function(angular){
    return angular.module('MyApp',['ngRoute']);
});

我收到一个错误,说我需要将angularroute添加到我的应用程序,但我仍然收到此错误。谁能指出我可能做错了什么?


11270
2017-10-10 22:18


起源



答案:


我在这里找到了解决方案: https://github.com/tnajdek/angular-requirejs-seed/blob/master/app/js/main.js

来自文档: http://code.angularjs.org/1.2.1/docs/guide/bootstrap#overview_deferred-bootstrap

window.name = "NG_DEFER_BOOTSTRAP!";
require(['angular', 'angularroute', 'app'], function(angular, angularroute, app){
    'use strict';

    //after you are done defining / augmenting 'MyApp' run this:

    angular.element().ready(function() {
        angular.resumeBootstrap([app['name']]);
    });
})

6
2017-11-22 20:15



这应该是正确的方法。 - Greg Wang
这给了我“angular.resumeBootstrap”中的“undefined is not a function”错误 - Metropolis


答案:


我在这里找到了解决方案: https://github.com/tnajdek/angular-requirejs-seed/blob/master/app/js/main.js

来自文档: http://code.angularjs.org/1.2.1/docs/guide/bootstrap#overview_deferred-bootstrap

window.name = "NG_DEFER_BOOTSTRAP!";
require(['angular', 'angularroute', 'app'], function(angular, angularroute, app){
    'use strict';

    //after you are done defining / augmenting 'MyApp' run this:

    angular.element().ready(function() {
        angular.resumeBootstrap([app['name']]);
    });
})

6
2017-11-22 20:15



这应该是正确的方法。 - Greg Wang
这给了我“angular.resumeBootstrap”中的“undefined is not a function”错误 - Metropolis


这是我的require配置,at require_config.js

var require = {
    baseUrl: '/js',
    paths: {
        'angular': 'lib/angular.min',
        'angular.route': 'lib/angular-route.min',
        'angular.resource': 'lib/angular-resource.min',
        'angular.animate': 'lib/angular-animate.min',
        'angular.ui.bootstrap': 'lib/ui-bootstrap-tpls-0.6.0.min',
        'angular.upload': 'lib/ng-upload.min',
        'jquery': 'lib/jquery-1.10.2.min'
    },
    shim: {
        'angular': ['jquery'],
        'angular.route': ['angular'],
        'angular.resource': ['angular'],
        'angular.animate': ['angular'],
        'angular.ui.bootstrap': ['angular'],
        'angular.upload': ['angular'],
        'my.angular': ['angular', 'angular.route', 'angular.resource', 'angular.animate', 'angular.ui.bootstrap', 'angular.upload']
    }
};

我的 script HTML上的标签 <head>

<script src="/js/require-config.js"></script>
<script src="/js/lib/require.js"></script>

来自服务器端的页面可以使用Angular或jQuery,或者都没有...因此,HTML标记可能包含一个简单的标记,最终激活整个Angular结构,如下所示:

<script>require(['myApp']);</script>

现在,在 myApp.js,我只是依靠 my.angular负责加载其他所有东西......事实上,我有其他类型的“my.angular”,具有不同的子集,我在网站的不同上下文中使用:

define(['my.angular'], function() {
    var myApp = angular.module('myApp', ['ngRoute', 'ngResource', 'ngAnimate', 'ngUpload', 'ui.bootstrap']);
   // more app module stuff here, including bootstrap
    return myApp;
});

5
2017-10-11 05:50



这对配置的require要求出错。在加载requirejs之前,我不确定如何在配置中使用require。 - Metropolis
上面的代码工作正常。您只需定义一个名为的变量 require 配置, 之前 加载RequireJS。当RequireJS加载时,它将使用 require 变量作为配置。 - J. Bruni
啊,我看到你现在在做什么。我错过了那里的var。 - Metropolis


angular 被定义为全局变量,您的声明将覆盖它。文件 angular.js 不返回任何东西,因此在RequireJS级别没有任何东西可以注入。请尝试以下方法:

define(['angular'], function(){
    return angular.module('MyApp',['ngRoute']);
});

我正在努力使用RequireJS和AngularJS,所以我创建了angularAMD来帮助我:
http://marcoslin.github.io/angularAMD/


3
2017-10-11 06:11



这样做是不是通过使用deps加载我的app.js文件:[“app”]。我也不明白使用angularAMD包含的原因。如果你想让这个变得容易,为什么要投入额外的东西,我至少不知道它是什么。 - Metropolis


您的设置看起来很好,除了您需要添加 angularroute 作为一个依赖 define 的一部分 app.js 文件。您提到了这一点,但未在示例代码中反映出这一点。

define(['angular', 'angularroute'], function(angular){
    return angular.module('MyApp',['ngRoute']);
});

0
2017-10-11 02:44



这也没有用。我仍然得到同样的错误。 - user1647708