【发布时间】:2016-03-30 02:18:12
【问题描述】:
我有一个工厂,我使用 $http 方法从服务器获取数据:
.factory('$factory', function ($q, $http, $timeout, $state, $ionicHistory, $localstorage) {
var obj = [];
var functions = {
getData: function () {
var dfd = $q.defer();
if(!obj){
$http({
url: remoteUrl+'/getdata',
method: 'POST',
data: {}
}).then(function(response) {
$timeout(function(){
obj = response.data;
dfd.resolve(response.data);
}, 2000)
}, function(response) {
}
}else{
return obj;
}
return dfd.promise;
}
}
}
所以这会获取数据并将其放入一个对象中。如果我错了,请纠正我,但是这种使用工厂进行此类操作的方法是它不绑定到控制器,并且可以在我的应用程序中的任何地方使用。
考虑到这一点,我希望这样做,以便我可以在我的应用程序中的任何地方获取数据,而不必每次都查询服务器。即,一旦查询服务器,工厂就会将响应保存到对象(就像我现在正在做的那样)。但是,例如,我之后在另一个控制器中访问数据时遇到了麻烦。
我已经开始使用 if(!obj) 行来制作我认为它应该看起来的样子,但是在 else 语句中我似乎不能只返回 obj 对象。它会引发错误,因为它也没有像预期的那样返回承诺。
我不确定我是否符合正确的路线。
谢谢
【问题讨论】:
-
您可能会发现这篇 SO 文章很有用:stackoverflow.com/questions/33968655/…