すでに述べた他の回答と同様に、アプリのセキュリティに注意する必要があります。
考えられる解決策は次のとおりです。
ユーザーが認証されているかどうかを確認する
API に認証を実装します。ユーザーが responseInterceptor でログインしているかどうかを確認できます。
.config(['$routeProvider','$httpProvider', function($routeProvider,$httpProvider) {
//setup your routes here...
var authChecker = ['$location', '$q', function($location, $q) {
//redirects the user to /login page if he's not authorized (401)
function success(response) {
return response;
}
function error(response) {
if(response.status === 401) {
$location.path('/login');
return $q.reject(response);
}
else {
return $q.reject(response);
}
}
return function(promise) {
return promise.then(success, error);
}
}];
$httpProvider.responseInterceptors.push(authChecker);
}])
詳細については、 $http ドキュメントを参照してください。
回避策: 実行スコープ
セキュリティの問題は解決しませんが、機能しています:
次のように実行ブロックでデータを取得します。
.run(function($http,$location,$rootScope) {
$rootScope.$on("$routeChangeStart", function (event, next, current) {
if($rootScope.gotData) {
$location.path(next.path);
} else {
$location.path('/loading');
}
});
$http.get('path/to/data').success(function() {
$rootScope.gotData = true;
$location.path('/home');
}).error(function() {
$location.path('/404');
})
})
詳細については、ドキュメントを参照してください。