Zapewnienie załadowania jednego kontrolera AngularJS przed innym

Zacznę od tego, że naprawdę nie mam pojęcia, czy to najlepszy sposób na osiągnięcie tego, co robię, i jestem bardzo otwarty na lepsze sugestie.

Korzystam z systemu kont użytkownikówOAUTH2 który pobiera informacje o użytkowniku w mojej bazie danych i zapisuje je jako zmienną,$rootScope.userInfo. Znajduje się w kontrolerze dołączonym do mojej aplikacjibody; tutaj myślałem, że kontroler najwyższego poziomu ładuje się przed tymi, którzy w nim mieszkają, ale najwyraźniej nie.

Jeśli załaduję widok, który próbuje uzyskać do niego dostęp$rootScope.userInfo obiekt przed moimmainCtrl miał szansę załadować go z mojej bazy danych, zgłasza błąd javascript iAngular przerwy.

Dla odniesienia, oto przybliżony pomysł szablonu:

<body ng-controller="mainCtrl">
    <header>Content</header>
    <div class='main-view' ng-controller="userProfile">
        <p>{{user.name}}</p>
        <p>{{user.email}}</p>
    </div>
</body>

Ładuję$rootScope.userInfo wmainCtrl lubię to:

$http.get('/api/users/' + $cookies.id).
    success(function(data) {
      $rootScope.userInfo = data.user[0];
      console.log("User info is:");
      console.log($rootScope.userInfo);
      $scope.status = 'ready';
    });

Potem dla mojegouserProfile kontrola, robię:

function userProfile($scope, $cookies, $http, $routeParams, $rootScope){
  if($scope.status == 'ready'){
    $scope.user = $rootScope.userInfo;
    console.log("Double checking user info, here it is:");
    console.log($rootScope.userInfo);
  }
}

Jeśli pochodzę z innej strony w aplikacji, która nie wywołuje$rootScope.userInfo, API ma wystarczająco dużo czasu, aby to sprawdzić i mojeuserProfile strona działa dobrze. Jeśli jednak wykonasz odświeżenie całej strony,$rootScope.userInfo nie ma czasu na załadowanie i dostaję błędy.

Jak mogę to naprawić?

questionAnswers(2)

yourAnswerToTheQuestion