@mrdunner

AngularJS. Он меня или я его?

Всем привет.

Проблема вот в чем:
использую AngularJS. Настроил, вроде, все как надо. Точнее, настроил все по инструкции.
И хочу загнать все данные в отдельный подобъект объекта $rootScope в функции 'run'.
Вроде загнал, а из под controller не хочет.

Кусок кода:
app.run(function($rootScope,$http) {
    $http.get('/webapi/amilogged').success(function(data) {if (data!=='1'){window.location = '/';}else{
    $http.get('/webapi/whoiam').success(function(data) {
      var un = angular.fromJson(data);
      $rootScope.profile = data;
    });
  }});
})
app.controller('peopleCtrl', function($scope, $rootScope) {
  console.log($rootScope.profile);
})


При обращении к peopleCtrl , в консоль выводится undefined.
Что нужно сделать, чтобы переменные были видны и в run, и в контроллерах?
Просьба заранее не пинать за говнокод.
Всем хорошего воскресенья =)
  • Вопрос задан
  • 354 просмотра
Решения вопроса 1
@dixoNich
frontend developer
Во-первых: оформите код так, как надо.
Во-вторых: Вы не понимаете основного принципа JavaScript - асинхронности. Так что вам рано использовать angular.
В функции run у Вас выполняется запрос на сервер, он асинхронный, и когда инициализируется контроллер, $rootScope.profile не существует.

Чтобы всё это работало... Сомневаюсь, что вы поймёте, но всё же:
Если хотите получить данные в контроллере до его загрузки, то у роутинга есть свойство resolve. Почитайте об этом.

AngularJS прелоад,как запилить?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы