从控制器中的服务获取数据不起作用

时间:2014-04-14 17:00:38

标签: angularjs

我正在尝试做一些简单的事情,但我不明白为什么它不起作用。

我只想获取控制器范围内的rewards数据:

服务:

.factory('RewardModel', ['RewardsPromise', 'CardModel',
                         function(RewardsPromise, CardModel) {
  var RewardModel = {};

  RewardModel.rewards = undefined; // init

  RewardModel.getRewards = function() {
    RewardsPromise.getRewards().then(function(data){ // Call to a webservice (GET)
      RewardModel.rewards = data.objects;
    })
  };
  return RewardModel;
  }])


.factory('RewardsPromise', ['$http', '$q',
                             function ($http, $q) {
    return {
        getRewards: function() {
            return $http.get("http://some_url").then(function(response) {
                return response.data;
            });
        }
    };
}])

控制器:

myAppControllers.controller('PromosCtrl', ['$scope', 'RewardModel',
                                            function($scope, RewardModel) {


    $scope.rwds = RewardModel.getRewards();

  }]);

最后,$ scope.rwds为空。 请注意,我已经尝试检查data.objects并且它包含数据。

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:1)

我对您的服务所做的更改(假设您不想将RewardsModel和RewardsPromise结合起来。在这里我会确保仍然返回承诺(供您的控制器使用)同时仍保持从您的数据中解析objects

RewardModel.getRewards = function() {
    return RewardsPromise.getRewards()
        .then(function(data){
            return data.objects;
        });
};
return RewardModel;

对于您的控制器,您希望在此处处理承诺,并在承诺解决后设置范围的值。

RewardModel.getRewards()
    .then(function(data){
        $scope.rwds = data;
    }, function(data){
        //handle any errors
    });

答案 1 :(得分:0)

`$ scope.rwds = RewardModel.getRewards();``

getRewards()不会返回任何内容。它可以回报承诺。然后,您可以在控制器中使用与服务中相同的内容。