http get方法不适用于angularjs中的for循环

时间:2017-05-10 05:19:58

标签: javascript angularjs

大家好我正在使用angularjs http获取方法我根据我的循环动态获取值但我无法从http获取值获取帮助如何执行此操作并解决问题

for(i=0;i<4;i++){
    var stream =i;
    $http.get('/ViewGetBUMaterialStream/' + stream  ).then(function (response) {
                   $scope.ViewStreams[i] = response.data;
    });
}

3 个答案:

答案 0 :(得分:2)

您可以使用let关键字。这是closures.

的常见问题

let语句声明一个块作用域局部变量,可选择将其初始化为一个值。

for(let i=0;i<4;i++){
    var stream =i;
    $http.get('/ViewGetBUMaterialStream/' + stream  ).then(function (response) {
               $scope.ViewStreams[i] = response.data;
    });
}

另一种方法是使用Immediately-invoked function expression

(function(i){
  $http.get('/ViewGetBUMaterialStream/' + Stream  ).then(function (response) 
     {
        $scope.ViewStreams[i] = response.data;
     });
})(i);

答案 1 :(得分:1)

此问题是由于javascript引起的。不幸的是,javascript没有循环的范围,在for循环中声明的变量在函数范围内。您应该使用匿名内部函数并将i的值传递给该功能块。

for(i=0;i<4;i++){
    var stream =i;
    (function(i){
      $http.get('/ViewGetBUMaterialStream/' + Stream  ).then(function (response) {
                   $scope.ViewStreams[i] = response.data;
      });
    })(i);
}

答案 2 :(得分:1)

尝试将i绑定到回调中。

for(i=0;i<4;i++){
  var stream =i;
  $http.get('/ViewGetBUMaterialStream/' + stream  ).then(function (response) {
    $scope.ViewStreams[i] = response.data;
  }.bind(i));
}