我无法修改函数内的范围

时间:2015-04-28 19:24:31

标签: angularjs

当我从http请求中获得结果时,我想修改范围。为了测试,我尝试在发出http请求之前和成功之后显示范围:

$scope.CopyFiles=function(destination){
  for(var i=0; i<$scope.list.length; i++){
    console.log("test 1 "+$scope.list[i]);

    var response=$http({method: 'GET', url:      
             '/checkIsSubdir/'+$scope.list[i]+'/'+destination});

    response.success(function(result) {
      console.log("check"+result.data);
      console.log("test 2 "+$scope.list[i]);
    });
    response.error(function(data, status, headers, config) {
      console.log("checksubdir oops");
    });
  };

我的http请求已成功,因为它显示了我的result.data

我的问题是第一个console.log("test 1 "+$scope.list[i]);显示范围但是 console.log("test 2 "+$scope.list[i]);显示未定义

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

只需在for循环中异步执行代码即可。

这是因为你的for循环进行了ajax调用&amp;当值不满足循环条件时结束i的值将是+1而不是$scope.list.length,这就是为什么你得到$scope.list[i]值未定义的原因。< / p>

在这种情况下,使用angular.forEach可以解决您的问题,此处索引值可用于循环成功

angular.forEach($scope.list, function(value, index){
    console.log("test 1 "+$scope.list[index]);

    var response=$http({method: 'GET', url:      
             '/checkIsSubdir/'+$scope.list[index]+'/'+destination});

    response.success(function(result) {
      console.log("check"+result.data);
      console.log("test 2 "+$scope.list[index]);
    });
    response.error(function(data, status, headers, config) {
      console.log("checksubdir oops");
    });
});