我有一个嵌套的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
答案 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
变量中,并且此变量将为您的回调保留适当的值。