Angularjs无法将数据服务响应添加到作用域变量

Angularjs cannot add data service response to scope variable

本文关键字:添加 作用域 变量 响应 服务 数据 Angularjs      更新时间:2023-09-26

我的控制器中有一个函数,它请求数据服务,我正试图添加到当前范围变量中,但它给了我未定义的错误

$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++;
               }
            }

类型错误:$scope.affiliates[i]未定义

我还尝试过从dataService返回数据并将其设置在外部,但它总是返回空。我该如何解决此问题?

不要忘记getAffiliateConversionApiService正在返回promise(这意味着它是一个异步操作),因此,在您甚至从getAffiliateConversionApiService获得结果之前,您的while块将为每个可能的i值执行

让我们假设$scope.affiliates.length6。当执行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++;
}

这不是一个真正的答案,但这里有一些调试应该会帮助您。此外,我从使用while循环切换到使用angular’s for Each

$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?
               });
           });
        }