Assegurando que um controlador AngularJS seja carregado antes de outro
Vou começar com o fato de que realmente não tenho ideia se essa é a melhor maneira de conseguir o que estou fazendo e estou muito aberto a sugestões melhores.
Eu tenho um sistema de conta de usuário usandoOAUTH2
que fica procura informações do usuário no meu banco de dados e salva como uma variável,$rootScope.userInfo
. Isso reside em um controlador que é anexado ao aplicativo do meu aplicativo.body
; aqui eu estava pensando que o controlador de nível mais alto carregaria antes daqueles que vivem dentro dele, mas aparentemente não.
Se eu carregar uma visão que tenta acessar este$rootScope.userInfo
objeto antes do meumainCtrl
teve a chance de carregá-lo do meu banco de dados, ele lança um erro de javascript eAngular
rompe.
Para referência, aqui está uma ideia aproximada do modelo:
<body ng-controller="mainCtrl">
<header>Content</header>
<div class='main-view' ng-controller="userProfile">
<p>{{user.name}}</p>
<p>{{user.email}}</p>
</div>
</body>
Estou carregando$rootScope.userInfo
emmainCtrl
como isso:
$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';
});
Então para o meuuserProfile
controle, eu faço:
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);
}
}
Se eu estou vindo de uma página diferente no aplicativo que não chama$rootScope.userInfo
, a API tem tempo suficiente para procurar e minhauserProfile
página funciona bem. No entanto, se fizer uma atualização de página inteira, o$rootScope.userInfo
não tem tempo para carregar e eu recebo erros.
Como posso consertar isso?