角度组合http获取请求与此

角度组合http获取请求与此

问题描述:

我正在使用this而不是$scope角度应用程序,当我尝试访问我的控制器中的get请求的结果时导致困难。角度组合http获取请求与此

我厂是这样的:

app.factory('footballService', function($http) { 
    return{ 
     getAllTeams : function() { 
      return $http({ 
        url: 'url', 
        dataType: 'json' 
      }) 
     } 
    } 
}); 

和我的控制器看起来像这样:

app.controller('footballController', function(footballService) { 

    var footballController = this; 

    footballService.getAllTeams().success(function(data){ 
     console.log(data); //this data is shown 
     footballController.teams = data; 
    }); 

    console.log(footballController.teams); //this is undefined 
}); 

的问题是,我想访问外getAllTeams()队。任何人都可以解释我怎样才能访问这个变量?我认为通过设置var footballController = this;可以让我在整个控制器中访问它,但是我必须误导Angular的工作方式。

感谢您提前提供任何帮助。

+3

因为您试图在填充之前访问异步数据 –

+0

@PankajParkar很有意义! –

您的getAllTeams()函数正在返回一个“承诺” - 底层数据在异步调用完成之前不可用。

你因此只能安全地访问一个.then回调中的数据(据我所知.success已过时),但它不一定是相同的回调中为其指定了数据到当前范围之一:

var promise = footballService.getAllTeams().success(function(data){ 
    console.log(data); //this data is shown 
    footballController.teams = data; 
}); 

promise.then(function() { 
    console.log(footballController.teams); 
}); 
+0

非常有意义。 –

+0

@PaulFitzgerald FWIW,我强烈建议你看看'$ resource' - 在我发现'$ resource'可以使RESTful服务交互变得更加容易之前,我在每个地方愉快地使用'$ http'大约一个月。 – Alnitak

将控制台呼叫转移到success回叫。

app.controller('footballController', function(footballService) { 

    var footballController = this; 

    footballService.getAllTeams().success(function(data){ 
     console.log(data); //this data is shown 
     footballController.teams = data; 
     console.log(footballController.teams); //this is populated now 
    }); 
});