2017-04-25 13 views
0

私は自分のプロジェクトでangularjsを使用しています。angularjsで計算を実行するオブジェクトへの方法

データベースからレコードをフェッチし、htmlページでバインディングすることができます。ここでは、データベース内の4つのコレクションからデータを取得する必要があるため、データを取得するために複数のサーバー呼び出しを実行する必要があります。別のスコープ変数ですべてを割り当てるとき。私のサンプルコードでは、私は配列オブジェクトとしてスコープを構築する際に自身のIDと店舗によって各建物のための床を取得し、その後フロアidで再び再びサーバー呼び出しを行うと、割り当てる必要単位を取得する必要が

ここ
var click = function(){  
    $http.get('/CalBuildingget').then(function (response) {      
        $scope.ViewBuildings = response.data; 

        }); 

    for (i = 0; i < $scope.ViewBuildings.length; i++) { 
     $http.get('/CalBuildingFloorget/'+ scope.ViewManageBuildings[i]._id).then(function (response) {         
        $scope.floorDetails = response.data;   
         }); 
        } 

を下回っています範囲内

最初にループを実行すると、ビルドのサーバーコールが開始されます。

答えて

0

最初のリクエストの成功コールバックでフロアをフェッチする必要があります。 そうですね。

var click = function(){  
$http.get('/CalBuildingget').then(function (response) {      
       $scope.ViewBuildings = response.data; 
       for (i = 0; i < $scope.ViewBuildings.length; i++) { 
        $http.get('/CalBuildingFloorget/'+ scope.ViewManageBuildings[i]._id).then(function (response) {         
       $scope.floorDetails = response.data;   
        }); 
       } 
       }); 
0

あなたはアプリケーションのパフォーマンス全体を使いこなすと、あなたはループでHTTPコールを送信してもよろしいですか?あなたは約1000レコードを持っている場合を考えると、サーバーに1000 HTTPコールを送信する余裕はありますか?代わりに/ CalBuildingget /のfloorDetailsを取得してみませんか?

ループでHTTPコールを送信しないでください。ネットワーク帯域幅とアプリケーションのパフォーマンスを考慮してください。

0

その後の複数のサービスコールでは、常に約束のコンセプトを活用する必要があります。概念的には、以下のようにする必要があります:

function callServiceForEachItem() { 
    var promise; 

    angular.forEach(items, function(item) { 
    if (!promise) { 
     //First time through so just call the service 
     promise = fakeService.doSomething(item); 
    } else { 
     //Chain each subsequent request 
     promise = promise.then(function() { 

     return fakeService.doSomething(item); 
     }); 
    } 
    }); 
} 

のベストプラクティスのための使用は、このリンクをperform chain service call

あなたはthis議論

を確認することができます
関連する問題