角度组合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的工作方式。
感谢您提前提供任何帮助。
您的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);
});
非常有意义。 –
@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
});
});
因为您试图在填充之前访问异步数据 –
@PankajParkar很有意义! –