我尝试使用服务来存储来自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;
});
});
答案 0 :(得分:3)
通过承诺,您可以链接then
次来电。
app.factory('Team', function($http) {
return {
promise: $http.get('/api/teams').then(function (response) {
return response.data;
})
}
});
这种表示法不仅更短,而且还传播了失败($ q.reject)。