AngularJS工厂使用Parse.com数据库

时间:2015-04-28 16:31:51

标签: angularjs parse-platform

所以我一直在努力学习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();
});

1 个答案:

答案 0 :(得分:1)

您的getItems()方法无法返回任何内容。返回语句从传递给success()和error()的回调方法返回。但那些是

  • 忽略
  • 在getItems()方法返回后,当来自Web服务的响应进入时,执行asynchronoulsy。

所以代码应该是:

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上注册回调。