所以我一直在努力学习AngularJS工厂来处理我的控制器之外的数据..我很难用这个,可以使用一些帮助,建议或方向。到目前为止,这就是我所拥有的,但是我的$ scope变量没有填充从parse中获取的数据。感谢任何帮助......
app.factory('ParseData', function($http) {
var ParseFactory = {};
ParseFactory.getItems = function() {
$http({method : 'GET',url : 'https://api.parse.com/1/classes/DrinkMenu/', headers:
{ 'X-Parse-Application-Id':'xxxxxxxxxxxx',
'X-Parse-REST-API-Key':'xxxxxxxxxx'}})
.success(function(data, status) {
return data;
})
.error(function(data, status) {
alert("Error");
});
};
return ParseFactory;
});
app.controller('OrderFormController', function($scope, ParseData) {
$scope.items = ParseData.getItems();
});
答案 0 :(得分:1)
您的getItems()
方法无法返回任何内容。返回语句从传递给success()和error()的回调方法返回。但那些是
所以代码应该是:
ParseFactory.getItems = function() {
return $http.get('https://api.parse.com/1/classes/DrinkMenu/', {
headers: {
'X-Parse-Application-Id':'xxxxxxxxxxxx',
'X-Parse-REST-API-Key':'xxxxxxxxxx'}
})
.then(function(response) {
// transform the promise of response into a promise of data
return response.data;
});
};
并在控制器中:
ParseData.getItems().then(function(data) {
$scope.items = data;
}).catch(function() {
alert('error');
});
您无法将异步调用转换为同步调用。如果可能的话,angular会执行此操作并从$ http调用返回数据,而不是返回promise。所以你自己的服务也必须返回一个承诺。并且控制器必须在返回的promise上注册回调。