Angularjs无法向范围变量添加数据服务响应

时间:2014-09-12 17:09:02

标签: javascript angularjs

我的控制器中有一个函数请求dataservice数据,我正在尝试添加到当前作用域变量,但它给了我未定义的错误

$scope.affiliates = d.data;
            if (isNaN($scope.affiliate_id)){
                var i = 0;

               while (i < $scope.affiliates.length){


                   var affiliate_id = $scope.affiliates[i].affiliate_id.replace(/["']/g, "");
                   DataService.getAffiliateConversionApiService(affiliate_id).then(function(apiData){

                      $scope.affiliates[i].apiData = apiData;//ERROR IN HERE
                   });
                   i++;
               }
            }

TypeError:$ scope.affiliates [i]未定义

我也尝试从dataService返回数据并将其设置在外部,但它总是返回空。 我怎么解决这个问题?

2 个答案:

答案 0 :(得分:2)

不要忘记getAffiliateConversionApiService正在返回一个承诺(这意味着它是一个异步操作),因此while块将针对每个可能的i执行} 之前你甚至可以从getAffiliateConversionApiService得到结果。

让我们假设$scope.affiliates.length 6 。执行then内的回调代码后,您的i 7

一种解决方案是使用angular.forEach代替while。但是,如果您仍想使用while,则需要将i值存储在另一个变量中:

while (i < $scope.affiliates.length){
  var index = i;
  var affiliate_id = $scope.affiliates[i].affiliate_id.replace(/["']/g, "");
  DataService.getAffiliateConversionApiService(affiliate_id).then(function(apiData){
    $scope.affiliates[index].apiData = apiData;
  });
  i++;
}

答案 1 :(得分:0)

这不是一个真正的答案,但这里有一些调试可以帮助你。  此外,我从使用while循环切换到使用angular的forEach

$scope.affiliates = d.data;
        if (isNaN($scope.affiliate_id)){
           console.log($scope.affiliates); // what does this return?

           angular.forEach($scope.affiliates, function(value, index){
               console.log(value); // output the affiliate, if any

               var affiliate_id = value.affiliate_id.replace(/["']/g, ""); 
               DataService.getAffiliateConversionApiService(affiliate_id).then(function(apiData){
                  console.log(apiData); // see what is returned
                  $scope.affiliates[index].apiData = apiData; // still an error?
               });
           });
        }