我正在尝试做一些简单的事情,但我不明白为什么它不起作用。
我只想获取控制器范围内的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
并且它包含数据。
有什么想法吗?感谢。
答案 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()
不会返回任何内容。它可以回报承诺。然后,您可以在控制器中使用与服务中相同的内容。