AngularJs嵌套.success $ scope变量未定义

时间:2016-06-15 09:21:13

标签: angularjs rest for-loop

我有一个嵌套的Http.get和一个嵌套的for循环。为什么我的$ scope变量变得未定义?

$http.get('source')
  .success(function(res){
    $scope.myObject = res;

   for (var ctr=0; ctr< $scope.myObject.length; ctr++){
    for (var secCtr=0; secCtr< $scope.myObject[ctr].members.length; secCtr++){

          $http.get('source?_id=' + $scope.myObject[ctr].members[secCtr]._id)
              .success(function(response){
                      //here says $scope.myObject[ctr] is undefined
               }).error //some code here
      }
   }
}).error //some codes here

1 个答案:

答案 0 :(得分:1)

当评估成功回调函数时,循环已经结束。因此,您的ctrl变量等于$scope.myObject.length。因此$scope.myObject[ctr]undefined

要处理此问题,您可以使用立即调用的函数表达式,如下所示:

for (var ctrl = 0; ctrl < $scope.myObject.length; ctrl++) {
    (function(myCtrl){
        $http.get(...).success(function() {
            console.log(myCtrl);
        });
    })(ctrl);
}

使用ctrl在每次迭代时调用此匿名函数会将其复制到myCtrl变量中,并且此变量将为您的回调保留适当的值。