В настоящее время я играю с угловым, и мне сложно найти способ выяснить это. Проблема в том, что я запускаю $ http-метод на app.run(). $ http метод получить комнаты от сервера и инициализировать его в $ rootScope.rooms var. В контроллере я использовал эту переменную комнат. Поскольку метод $ http является асинхронным, и иногда он получает значение null, потому что контроллер загружен до завершения метода. Я пытаюсь справиться с этим по-другому.Функция Async в методе angular.run() не была выполнена до контроллера
game.jsangular.module('GameModule', [])
.run([function ("injectors...") {
$http.get("/rooms").success(function(result){
$rootScope.rooms = result;
}).error(function(error){
console.log('Error fetching rooms');
});
}])
.controller('GameCtrl', ['$scope', function ($scope) {
console.log($rootScope.rooms);
}]);
Поскольку номер переменный будет использоваться в других файлы тоже я не вероятно, хочу поставить $ HTTP метода внутри каждый контроллер, если нет других способов. Если было бы неплохо, если бы я мог использовать некоторую услугу углов
Это характер асинхронных событий. У вас ограниченный контроль после завершения HTTP-запросов и, следовательно, когда эти данные будут доступны. См. [Инициализация службы AngularJS с асинхронными данными] (http://stackoverflow.com/questions/16286605/initialize-angularjs-service-with-asynchronous-data) для решений. – user2943490
Вы пробовали $ rootScope. $ Watch – byrdr
Если вы используете угловой маршрутизатор, вы можете определить блок разрешения, чтобы страница не переместилась в GameCtrl до тех пор, пока не будет загружен вызов 'room'. Это обычный способ обеспечить загрузку службы перед тем, как перейти на страницу, которая ее использует. – Benmj