我在Angular中有一个服务,它从数据库表中获取查询列表。用户选择一个并移动到另一个视图以使用它。当用户点击回到第一个视图时,我想避免重新获取查询列表。查询列表存储在服务中,但由于我的获取例程使用.then和promises,我很难将其交还给控制器。
app.service('queryService', function ($http)
{
var querys = new Object();
this.loadQueryList = function()
{
if (querys!=null)
{
//how to return the querys list here? caller expecting a promise
}
var promise = $http.post("php/datapump.php", { action: "FETCH", item: "QUERYS", id1: null, id2: null})
.then(function (response)
{
querys=response.data;
return querys;
});
return promise; // Return the promise to the controller
};
});
在控制器初始化中,使用以下命令调用服务:
queryService.loadQueryList().then(function(d)
{
$scope.querys = d;
$scope.selectedquery=queryService.getSelectedQuery();
});
或者是否有更好的方法?我可以想象在服务中设置一些标志来解决这个问题但看起来很难看。我只是想避免第二次获取数据。
答案 0 :(得分:2)
您可以创建自己的承诺并立即解决。这比设置标志并直接返回一些缓存数据要好得多,因为它可以使您的服务接口保持一致 - 该方法始终返回一个承诺。
var deferred = $q.defer();
deferred.resolve(yourdata);
return deferred.promise;
您显然需要在服务中注入$ q。