2017-04-25 48 views
0

我在我的項目中使用了angularjs。如何在angularjs中執行計算的對象

我能夠從數據庫中獲取記錄並在html頁面中進行綁定。在這裏我需要從數據庫中的4個集合中獲取數據,因此我需要執行多個服務器調用才能獲取數據。當我在單獨的作用域變量中分配所有內容時。我的示例代碼如下

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;   
         }); 
        } 

在這裏,我需要在建設範圍爲數組對象爲取得用於通過其ID和存儲每個建築物樓層,然後按樓層ID獲取其需要再次做服務器調用和分配再次單位在範圍內。

我該如何做到這一點,因爲它首先執行循環,然後開始建立服務器調用。

回答

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討論

相關問題