Запустите angular.js в качестве обратного вызова (например, $.ajax)

Я пишу приложение в основном с двумя javascripts, resources_loader.js и app.js, где первый загружает некоторые файлы json, используемые app.js.

Проблема в том, что 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 внутри обратного вызова success. Каждый раз, когда я пытаюсь запустить его, 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 ответ

Решение

Удалить 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']);
Другие вопросы по тегам