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.userInfohat 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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage