我尝试在服务中请求一些数据。我想确保数据保存在服务的变量中,因为由于状态更改,我的 Controller 将一直重新加载,并且在站点加载时我只需要一次数据。
app.service('resultDeals',['$translate','$cookies','$http',
function($translate,$cookies,$http) {
var currentOrigin = {};
var originsUser={};
return {
loadOrigins:function() {
$http.get('app/deals/deal.json').success(function(response){
console.log(response);
originsUser = response.data;
return originsUser
}).error(function(err){
console.log(err);
});
},
userOrigin:originsUser
};
}]);
我的 Controller 如下所示
console.log(resultDeals.loadOrigins());
$scope.updateOrigins=resultDeals.loadOrigins();
问题是 resultDeals.loadOrigins()
始终未定义。
我想确保将从 loadOrigins() 获取的数据存储在服务变量中,并且仅在需要时从 Controller 访问它,以便当 Controller 重新加载时不必再获取数据。
我该怎么做?
最佳答案
不要使用 .success
和 .error
回调函数,因为它们无法返回任何内容,因此无法继续 promise 链。而是在 $http.get
方法(返回一个 Promise 对象)上使用 .then
。当 promise 已解决
或拒绝
promise 时,它将能够返回数据
。您可以从 Controller 方法继续 promise
链。
服务
return {
loadOrigins: function() {
return $http.get('app/deals/deal.json')
.then(function(response) {
console.log(response);
originsUser = response.data;
return originsUser
}, function(err) {
console.log(err);
});
},
userOrigin: originsUser
};
Controller
resultDeals.loadOrigins().then(function(user){
$scope.updateOrigins= user;
}, function(){
console.log("Errror occurred.")
})
关于angularjs - 从服务获取异步数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33277096/