我试图理解Angular中的一些最佳实践,并希望在工厂中结合提到的模式以从REST API检索数据:
function feedFactory($resource) {
var service = {
feedData: [],
};
getFeedFromApi();
return service;
function getFeedFromApi() {
var feed = $resource('http://footballdb.herokuapp.com/api/v1/event/de.2014_15/teams?callback=JSON_CALLBACK', {}, {
query: {
method: 'JSONP'
}
});
feed.query().$promise.then(function(result) {
service.feedData = result.toJSON();
});
}
}
不幸的是,我无法设置服务对象的feedData变量,尽管我收到了带有数据的有效promise对象。
答案 0 :(得分:2)
deal with asynchronous requests的方式不正确。您返回时无法获得响应。所以undefined
。
通常角度的工厂看起来像这样:
function feedFactory($resource) {
var service = {
getFeedFromApi: getFeedFromApi
};
function getFeedFromApi() {
var feed = $resource('http://footballdb.herokuapp.com/api/v1/event/de.2014_15/teams?callback=JSON_CALLBACK', {}, {
query: {
method: 'JSONP'
}
});
return feed.query().$promise.then(function (result) {
return result.toJSON(); // you really need to convert response to string?
});
}
return service;
}
然后你以这种方式在控制器中使用它们:
feedFactory.getFeedFromApi().then(function(data) {
// do something with data
});