Sicherstellen, dass ein AngularJS-Controller vor dem anderen geladen wird
Ich gehe davon aus, dass ich wirklich keine Ahnung habe, ob dies der beste Weg ist, um das zu erreichen, was ich tue, und ich bin sehr offen für bessere Vorschläge.
Ich verwende ein BenutzerkontosystemOAUTH2
die Benutzerinformationen in meiner Datenbank nachschlagen und als Variable speichern,$rootScope.userInfo
. Dies befindet sich in einem Controller, der an meine App angehängt istbody
; hier dachte ich, dass der Controller der höchsten Ebene vor denen geladen werden würde, die darin leben, aber anscheinend nicht.
Wenn ich eine Ansicht lade, die versucht, darauf zuzugreifen$rootScope.userInfo
Objekt vor meinemmainCtrl
hatte die Chance, es aus meiner Datenbank zu laden, es wirft einen Javascript-Fehler undAngular
geht kaputt.
Als Referenz ist hier eine grobe Vorstellung der Vorlage:
<body ng-controller="mainCtrl">
<header>Content</header>
<div class='main-view' ng-controller="userProfile">
<p>{{user.name}}</p>
<p>{{user.email}}</p>
</div>
</body>
Ich lade$rootScope.userInfo
immainCtrl
so was:
$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';
});
Dann für meineuserProfile
Kontrolle, ich mache:
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);
}
}
Wenn ich von einer anderen Seite in der App komme, die nicht aufruft$rootScope.userInfo
hat die API genug Zeit, um es nachzuschlagen und meineuserProfile
Seite funktioniert gut. Wenn Sie jedoch eine vollständige Aktualisierung durchführen, wird die$rootScope.userInfo
Ich habe keine Zeit zum Laden und bekomme Fehler.
Wie kann ich das beheben?