如何在已经预期的情况下将已经获取的数据传递给控制器

时间:2013-11-13 22:35:36

标签: angularjs

我在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();
});

或者是否有更好的方法?我可以想象在服务中设置一些标志来解决这个问题但看起来很难看。我只是想避免第二次获取数据。

1 个答案:

答案 0 :(得分:2)

您可以创建自己的承诺并立即解决。这比设置标志并直接返回一些缓存数据要好得多,因为它可以使您的服务接口保持一致 - 该方法始终返回一个承诺。

 var deferred = $q.defer();
 deferred.resolve(yourdata);
 return deferred.promise;

您显然需要在服务中注入$ q。