2017-08-10 25 views
1

angularjsにいくらかの遅延を加えたいと思います。そのため、APIからデータを取得できます。私のAPIは重いので私はこの関数を呼び出しています。基本的に私はページを読み込むためにいくつかの遅延が欲しいので、私のAPIは適切に動作します。私はデータが間違っている時間を即座に引き出すいくつかの時間を試みた。私のページをリフレッシュするとうまく動作します。更新angularjsに遅延を追加する

 Help to put $timeout function in this angularjs 
    // Geting test stuff 
    $scope.teststuff = function() { 
$scope.loading = true; 
$http.get(settings.WebApiBaseUrl + 'Api/testing')   
    .success(function (data) { 
     $scope.mydata = data; 
     $scope.loading = false; 
    }).error(function (data, status, headers, config) { 
     alert("Error " + status)    
    $scope.loading = false; 
    })  

}

+0

あなたの要件ごとにサービスのタイムアウトを増やすことができます。 – Rahul

+0

なぜあなたは遅れが必要です..私は、あなたのteststuff関数は、ページが読み込まれるとすぐに呼び出されると信じています! – Rahul

+1

任意の '$ timeout'遅延を追加することは、非同期コードに対処するためのひどい方法です。解決されたPromiseを使用して、AJAX呼び出しに応じたコードが実行されるタイミングを制御するか、ajax呼び出しがまだ進行中のときに空のデータに対処できるようにコンポーネントを設計します。 –

答えて

0

この問題は簡単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

+0

すべての単一コール(エンドポイント)を遅延させたいですか?彼らが呼び出されたとき。 –

+0

$ httpリクエストがある場合は、データを受信するのを待って遅延を設定する必要がないように約束しています。アプリケーションに角度ルータ(ui-router)を使用していますか?私が与えた行は、HTTPリクエストの待ち時間を増やすでしょう。要求がタイムアウトしていると思ったので、これを与えました。 –

+0

@DeveshKhosla angularは$ routeproviderサービスを持っています。httpリクエストをresolveパラメータに入れることができます。httpリクエストが完了するまで、ページはロードされません。 http://embed.plnkr.co/kHXK54 http://odetocode.com/blogs/scott/archive/2014/05/20/using-resolve-in-angularjs-routes.aspx –

関連する問題