2015-04-18 2 views
0

Я посылаю HTTP запрос на app.run часть углового приложения. Но проблема в том, что контроллер, который использует $rootScope.projects, запускается до того, как $rootScope.projects был создан и заполнен запросом HTTP.

Как я могу предотвратить загрузку контроллера, если $rootScope.projects не определено?

Вот мой HTTP запрос:

$http({method : 'GET', url:'https://api.parse.com/1/classes/Project', 
     headers: { 'X-Parse-Application-Id':ParseID, 'X-Parse-REST-API-Key':ParseREST}}) 
    .success(function(res) { 
     $rootScope.projects = res.results; 
    }) 
    .error(function(err) { 
     console.log(err); 
     $rootScope.projects = []; 
    }); 
+3

Вы используете 'ui-router'? Если это так, возникает вопрос «разрешить», чтобы делать такие вещи до создания экземпляра контроллера. – scniro

+0

. Вы можете вручную загрузите свое угловое приложение, как только данные на стороне сервера будут восстановлены в обратном вызове AJAX: https://blog.mariusschulz.com/2014/ 10/22/асинхронно-bootstrapping-angularjs-applications-with-server-side-data –

+0

Вы также можете инициализировать переменную проектов пустым массивом. – user1777136

ответ

0

Вы не имеете никакого контроля над контроллером время создания экземпляра при использовании ng-controller. Используйте одноразовые часы

var initWatcher = $rootScope.$watch('projects', function (newVal, oldVal) { 
    if (newVal !== oldVal) { 
    initWatcher(); 
    // init further 
    } 
}) 

Если ngRoute/ui-router в этом случае, вы можете использовать маршрут resolve, который предназначен именно для таких целей.

Смежные вопросы