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ć?