我记得在堆栈溢出时多次看到建议将有角度的$ http调用委托给服务,而不是在控制器中进行。当人们希望服务以某种方式修改响应对象,然后将其传回控制器之前,我可以看到这样做的清洁。
但是,如果不需要修改响应怎么办?在这种情况下,使用控制器中的函数来调用服务以返回$ http请求似乎是多余的。是否有其他原因我可以知道为服务而不是控制器保留$ http调用?
e.g。
// 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?
答案 0 :(得分:0)
我同意你的看法。如果服务在多个控制器中重用,并且它不仅仅是发出HTTP请求,我通常只将这些代码放在服务中。
请注意,您的服务代码不利用承诺链,因此使用promise反模式。你需要的只是
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;
});
}