:
この問題は簡単resolve property of $routerProvider
を使用することによって解決することができます。この設定を使用してください。したがって、ここでは/ed
のルートは、解決が完了するまでロードされません。つまり、httpリクエストが値を返さなければならないことを意味します。
app.config(['$routeProvider', '$httpProvider', function ($routeProvider, $httpProvider) {
var settings.WebApiBaseUrl = "some url you want to use";
$routeProvider.when("/al", { templateUrl: "Views/test.html", controller: "testCtrl" })
.when("/ed", {
templateUrl: "Views/test2.html",
controller: "test2Ctrl",
resolve: {
initialize: function($http, $sessionStorage){
$http.get('api/ApiKey/' + $sessionStorage.user)
.success(function (myKey) {
return $http.get(settings.WebApiBaseUrl + 'Api/test1', { headers: { 'X-ApiKey': myKey } })
.success(function (data) {
return data;
}).error(function (data, status, headers, config) {
alert("error" + status);
});
}).error(function (data, status, headers, config) {
alert("error" + status);
});
}
}
})
.otherwise({
redirectTo: '/al'
});
}]);
ここでコントローラで行う必要があります。
app.controller('test2Ctrl', function ($scope, initialize) {
$scope.loading=false;
$scope.test1=initialize;
$scope.loading=true;
});
旧回答: ので、あなたが約束されたHTTP要求を持っており、データが受信されるまで待機しますし、あなたの例から、私はあなたがHTTPまでの事のロード画面の種類を実装している見ることができますリクエストが完了しました。
大量のhttp要求がタイムアウトしないようにするには、使用することができます。
angular.module('MyApp', [])
.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.timeout = 5000;
}]);
ページでは、ページをマスクするためのローディングスピナーライブラリをアクティブにするためにスコープ変数($scope.loading = true;
)を使用することができます完了するためのHTTPリクエストを待ちながら。チェックアウトangular loading overlayまたはこれを行うための他のコードをチェックしてください。
参考: http timeout
あなたの要件ごとにサービスのタイムアウトを増やすことができます。 – Rahul
なぜあなたは遅れが必要です..私は、あなたのteststuff関数は、ページが読み込まれるとすぐに呼び出されると信じています! – Rahul
任意の '$ timeout'遅延を追加することは、非同期コードに対処するためのひどい方法です。解決されたPromiseを使用して、AJAX呼び出しに応じたコードが実行されるタイミングを制御するか、ajax呼び出しがまだ進行中のときに空のデータに対処できるようにコンポーネントを設計します。 –