Angular:在服务中使用promise来存储数据一次,缓存

时间:2014-03-22 14:02:13

标签: angularjs angularjs-scope promise

我尝试使用服务来存储来自API的数据,并且只在不同页面上调用API一次。现在我有一个解决方案,使用控制器访问服务的承诺并在回调中设置范围变量,但我想知道是否有办法使这个更干净。我在另一个帖子中看到$ http.get返回一个promise,所以应该有一种方法可以使用它,但是当我在下面的问题中尝试使用yohairosen的答案时,但它没有正确设置我的变量:Use Promise and service together in Angular

这是我的代码

/app/scripts/services/team.js

app.factory('Team', function($http, $q) {
  var deferred = $q.defer();

  $http.get('/api/teams').success(function(teams){
    deferred.resolve(teams);
  });

  return {
    promise: deferred.promise,
  }
});

/app/scripts/controllers/teams.js

app.controller('TeamsCtrl', function ($scope, $routeParams, Team) {
  Team.promise.then(function(data){
    $scope.teams = data;
  });
});

1 个答案:

答案 0 :(得分:3)

通过承诺,您可以链接then次来电。

app.factory('Team', function($http) {

  return {
    promise: $http.get('/api/teams').then(function (response) {
      return response.data;
    })
  }
});

这种表示法不仅更短,而且还传播了失败($ q.reject)。