如何从单个$ http调用获得不同的响应与不同的URL角度?

时间:2018-01-09 07:50:02

标签: javascript angularjs

我的应用中有两个不同的网址。我只想得到两个不同的响应,并希望将它分配给两个不同的对象。这是下面的代码。

> angular.module('App',[]).controller('Ctr',function($scope,http){
>         var urls = {
>               "data11":"data1.json",
>               "data22":"data2.json"
>         };
>         for(var val in urls){
>           console.log(urls[val]);
>           http.getData(urls[val]).then(function(resp){
>             $scope[val] = resp;
>           });
>         }
>         console.log($scope);
>             
>       }).factory('http',function($http){
>             return{
>               getData:function(url){
>                 console.log("url",url);
>                 return $http.get(url).then(function(resp){
>                   return resp;
>                 });
>               }
>             }
>       });

Plunker

1 个答案:

答案 0 :(得分:1)

问题是,当您执行http回调时,valundefined,因为您的循环已经完成。您需要通过为val创建新范围来保留http调用块中的val。例如,您可以使用闭包:

for(var val in urls) {
   (function() { 
     var newVal = val;
     http.getData(urls[newVal]).then(function(resp){
       $scope[newVal] = resp;
     });
   })();
 }