如何在angularjs中执行计算

时间:2017-04-25 09:45:04

标签: javascript angularjs arrays node.js mongodb

我在项目中使用angularjs。

我能够从数据库中获取记录并在html页面中绑定。这里我需要从数据库中的4个集合中获取数据,因此我需要执行多次服务器调用来获取数据。当我在单独的Scope变量中分配所有内容时。我的示例代码在

下面
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获取每个Building的楼层,并将其作为数组对象存储在构建范围中,然后再通过floor id获取再次需要进行服务器调用并在范围内分配的单元。

我如何实现这一点,首先它执行循环然后它启动服务器调用构建。

3 个答案:

答案 0 :(得分: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;        
                    });
                 }
                });

答案 1 :(得分:0)

您将使用正在使用的方法搞乱应用程序的整体性能,您确定要在循环中发送HTTP调用吗?想想你有大约1000条记录的案例,你是否应该向服务器发送1000个HTTP呼叫?相反,为什么不在/ CalBuildingget /?

中获取floorDetails

永远不要在循环中发送HTTP调用,考虑网络带宽和应用程序性能。

答案 2 :(得分:0)

对于多个后续服务调用,您应始终使用promise概念。从概念上讲,它应该如下所示:

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讨论