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

时间:2014-05-29 07:19:05

标签: angularjs requirejs domready 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>

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']);
    });
});

app.js:

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

1 个答案:

答案 0 :(得分:10)

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

<html ng-app="myApp">

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

angular.bootstrap(document, ['myApp']);

所以这是HTML的正确版本

<html> <!-- Notice: removed ng-app -->
<body>
    <script data-main="/scripts/config.js" src="scripts/require.js"></script>
</body>
</html>

此外,看到真正的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);
    }
});