运行angular.js作为回调(例如$ .ajax)

时间:2013-06-25 19:19:18

标签: javascript angularjs yepnope

我正在编写一个主要有两个javascripts,resources_loader.js和app.js的应用程序,其中第一个加载app.js使用的一些json文件。

问题是:app.js(有angular.js的东西)应该只在resources_loader.js之后运行。我试图在成功回调中运行角度代码(resources_loader包含延迟),但这似乎不能很好地工作。这是我的index.html:

<!doctype html>
<html ng-app="myapp">
<body>
    <script src="angular.js"></script>
    <script src="resources_loader.js"></script>
</body>
</html>

考虑到我在成功回调中将app.js移动到resources_loader。每当我尝试运行它时,angular会引发以下异常:Uncaught Error: No module: myapp

我的猜测是angular.module('myapp', [])应该在onload的事件之前运行,这不是这里的情况。

另一件事是我想在我的项目中使用yepnope.js:

<script "yepnope.js"></script>
<script "resources_loader.js"></script>
<script>
    var loader = load_stuff();
    yepnope({
        test: loader.resolved(),
        yep: ['angular.js', 'app.js', 'foo.js', 'bar.js'],
        nope: ['fail.js']
    });
</script>

app.js包含角度代码。我认为它更高效,因为它只在加载资源时加载角度。但是我怎么能这样做呢?

1 个答案:

答案 0 :(得分:1)

ng-app代码中移除<html>,并在加载资源后使用angular.bootstrap(document, ['myapp']);启动它,如下所示:

var app = angular.module('myapp', []);

app.config(['$routeProvider', '$locationProvider', function($router, $location) {
    $location.html5Mode(true);

    $router
    .when('/', {
        templateUrl: 'some_template.html',
        controller: 'myController'
    });
}]);

// and then, after everything, run
angular.bootstrap(document, ['myapp']);