6

これが私がやっていることを達成するための最良の方法であるかどうかは本当にわからず、より良い提案に対して非常にオープンです.

OAUTH2データベースでユーザー情報を検索し、変数として保存するユーザー アカウント システムを使用しています$rootScope.userInfo。これは、私のアプリのbody;に追加されたコントローラーにあります。ここでは、最高レベルのコントローラーがその中にあるコントローラーよりも先にロードされると考えていましたが、どうやらそうではないようです。

$rootScope.userInfoデータベースからこのオブジェクトをロードする前に、このオブジェクトにアクセスしようとするビューをロードするとmainCtrl、javascript エラーがスローされてAngular中断します。

参考までに、テンプレートの大まかなアイデアを次に示します。

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

私はこのようにロード$rootScope.userInfomainCtrlています:

$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';
    });

次に、私のuserProfileコントロールのために、次のことを行います。

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);
  }
}

を呼び出さないアプリ内の別のページからアクセスしている場合$rootScope.userInfo、API はそれを検索するのに十分な時間があり、userProfileページは正常に動作します。ただし、ページ全体を更新すると、$rootScope.userInfoロードする時間がなく、エラーが発生します。

どうすればこれを修正できますか?

4

2 に答える 2