Angular 控制器或服务中 $http 的推荐做法
Angular recommended practice for $http in controller or service
我记得多次看到堆栈溢出建议将 angular $http 调用委托给服务,而不是在控制器中执行。当有人希望服务以某种方式修改响应对象,然后再将其传回控制器时,我可以看到这样做的清洁度。
但是,如果不需要修改response呢?在这种情况下,使用控制器中的函数来调用服务以 return $http 请求似乎是多余的。有没有其他原因我可以知道为服务而不是控制器保留 $http 调用?
例如
// in controller
function potatoChipTime() {
chip = chipService.getAPotatoChip();
}
// in service (inject $q and $http)
var service = {
getAPotatoChip: getAPotatoChip
}
return service;
function getAPotatoChip() {
var deferred = $q.defer();
$http.get(url)
.success(function(response) {
deferred.resolve(response);
)}.error(function(error) {
deferred.reject(error)
});
return deferred.promise;
}
// redundant, no? a lot of fuss to get a potato chip?
我同意你的看法。我通常只在服务在多个控制器中重复使用并且它不仅仅是简单地发出 HTTP 请求时才将此类代码放入服务中。
请注意,您的服务代码没有利用承诺链,因此使用了承诺反模式。您只需要
function getAPotatoChip() {
return $http.get(url).then(function(response) {
return response.data;
}).catch(function(response) {
return $q.reject(response.data);
});
}
或者,如果您真的不关心承诺是被数据拒绝还是被错误的完整响应拒绝:
function getAPotatoChip() {
return $http.get(url).then(function(response) {
return response.data;
});
}
我记得多次看到堆栈溢出建议将 angular $http 调用委托给服务,而不是在控制器中执行。当有人希望服务以某种方式修改响应对象,然后再将其传回控制器时,我可以看到这样做的清洁度。
但是,如果不需要修改response呢?在这种情况下,使用控制器中的函数来调用服务以 return $http 请求似乎是多余的。有没有其他原因我可以知道为服务而不是控制器保留 $http 调用?
例如
// in controller
function potatoChipTime() {
chip = chipService.getAPotatoChip();
}
// in service (inject $q and $http)
var service = {
getAPotatoChip: getAPotatoChip
}
return service;
function getAPotatoChip() {
var deferred = $q.defer();
$http.get(url)
.success(function(response) {
deferred.resolve(response);
)}.error(function(error) {
deferred.reject(error)
});
return deferred.promise;
}
// redundant, no? a lot of fuss to get a potato chip?
我同意你的看法。我通常只在服务在多个控制器中重复使用并且它不仅仅是简单地发出 HTTP 请求时才将此类代码放入服务中。
请注意,您的服务代码没有利用承诺链,因此使用了承诺反模式。您只需要
function getAPotatoChip() {
return $http.get(url).then(function(response) {
return response.data;
}).catch(function(response) {
return $q.reject(response.data);
});
}
或者,如果您真的不关心承诺是被数据拒绝还是被错误的完整响应拒绝:
function getAPotatoChip() {
return $http.get(url).then(function(response) {
return response.data;
});
}