所以我做了大量的研究并阅读了很多教程,但我无法找到我想要完成的直接答案。
我只是试图访问存储在JSON-Generator.com上的JSON对象并将其粘贴在表格中并重复它。听起来很简单,但似乎有很多不同的方法可以做到这一点,所有的消息都省去了我需要的一条信息。
如果我控制台内的console.log eventsService它返回一个构造函数,如果我在console.log eventsService.data它返回undefined。
如何在我的控制器中访问$ http返回的数据?
// CONTROLLERS
app.controller('currentTradeshowsController', ['$scope', 'eventsService', function($scope, eventsService){
$scope.events = eventsService.data;
}]);
// SERVICES
app.service('eventsService',function($http){
var eventsUrl = 'http://www.json-generator.com/j/bVWJaYaWoO?indent=4';
$http({method: 'GET', url: eventsUrl}).
success(function(data){
// not sure what to write here....
return data;
})
.error(function(){
console.log('ah shit');
})
});
答案 0 :(得分:1)
首先,$http
调用是异步的,因此您可能希望使用promises将数据正确加载到范围变量中
第二 - 您需要从服务中返回一些内容,使其在服务声明函数之外工作
<强>控制器强>
app.controller('currentTradeshowsController', function($scope, eventsService){
eventsService.getData().then(function(data) {
$scope.events = data;
});
});
<强>服务强>
app.service('eventsService',function($http){
var eventsUrl = 'http://www.json-generator.com/j/bVWJaYaWoO?indent=4';
return {
getData: function() {
return $http.get(eventsUrl);
}
}
});
$http.get
是GET请求的简写,它会返回一个承诺,因此您可以在控制器中将其与.then
一起使用