AngularJS + RequireJS + domReady中的未捕获对象

Ili*_*ski 3 domready requirejs angularjs angular-bootstrap

我有一个工作的AngularJS应用程序,并开始使用RequireJS进行模块依赖.遵循本指南 - http://www.startersquad.com/blog/angularjs-requirejs/ - 使用domReady插件手动启动角度应用程序.

在Chrome中测试并进入Uncaught object控制台.没有角度通常提供的通常细节,只有无用的调用堆栈.

这是我的应用程序的一个非常简化的版本:

<html ng-app="myApp">
<body>
    <script data-main="/scripts/config.js" src="scripts/require.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

config.js:

requirejs.config({
    shim: { 'angular': { exports: 'angular' } },
    deps: ['starting']
});
define(['require', 'angular', 'app'], function (require, angular) {
    require(['domReady!'], function (document) {
        angular.bootstrap(document, ['myApp']);
    });
});
Run Code Online (Sandbox Code Playgroud)

app.js:

define(['angular'], function (angular) {
    var app = angular.module("myApp", []);
    return app;
});
Run Code Online (Sandbox Code Playgroud)

Ili*_*ski 10

实际上,在简化版中,错误更容易被发现.问题在于模块的双重使用.第一次使用HTML(从RequireJS之前的时间开始):

<html ng-app="myApp">
Run Code Online (Sandbox Code Playgroud)

在RequireJS完成加载文档后,第二次在手动引导程序中:

angular.bootstrap(document, ['myApp']);
Run Code Online (Sandbox Code Playgroud)

所以这是HTML 的正确版本:

<html> <!-- Notice: removed ng-app -->
<body>
    <script data-main="/scripts/config.js" src="scripts/require.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

此外,要看到真正的AngularJS的错误,而不是Uncaught object(这是由有例外情况特殊处理RequireJS打印),您可以捕获并显示它们如下:

require(['domReady!'], function (document) {
    try {
        // Wrap this call to try/catch
        angular.bootstrap(document, ['materialApp']);
    }
    catch (e) {
        console.error(e.stack || e.message || e);
    }
});
Run Code Online (Sandbox Code Playgroud)