これは、これが私がやっていることを達成するための最良の方法であるかどうか、本当に分かりません。1つのAngularJSコントローラが別のものより先にロードされるようにする
OAUTH2
を使用しているユーザーアカウントシステムで、データベースのユーザー情報を参照し、変数として保存します($rootScope.userInfo
)。これは私のアプリのbody
に追加されたコントローラにあります。ここでは、最高レベルのコントローラがその中にあるものの前にロードされると思っていましたが、明らかにそうではありません。
は、私は私のデータベースからそれをロードする機会があった私のmainCtrl
前にこの$rootScope.userInfo
オブジェクトにアクセスしようとしたビューをロードした場合、それはjavascriptのエラーとAngular
休憩をスローします。
参考のため、ここではテンプレートの目安です:私はこのようなmainCtrl
で$rootScope.userInfo
をロードしています
<body ng-controller="mainCtrl">
<header>Content</header>
<div class='main-view' ng-controller="userProfile">
<p>{{user.name}}</p>
<p>{{user.email}}</p>
</div>
</body>
:私のuserProfile
制御に続いて
$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';
});
、私が行います
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);
}
}
私がアプリ内の別のページから来ている場合は、wh ichは$rootScope.userInfo
を呼び出さず、APIはそれを調べるのに十分な時間があり、userProfile
ページは正常に動作します。しかし、フルページのリフレッシュを実行すると、$rootScope.userInfo
にロードする時間がなくなり、エラーが発生します。
どうすればこの問題を解決できますか?
これはかなり近いです、私はサービスとしてそれを使用する考えが好きです。しかし、ローディングオーダーの問題は解決しません。私はサービスをセットアップしましたが、サービスがデータを返す前にコントローラをロードしています!アイデア? – Jascination
私はここで更新された質問をしました:http://stackoverflow.com/questions/18477711/force-angularjs-service-to-return-data-before-loading-controller私はこれを答えとして受け入れます仕事のほとんどは、その1つにも答えてください。 – Jascination