Angular建议在控制器或服务中使用$ http

时间:2015-06-27 06:05:47

标签: angularjs service controller

我记得在堆栈溢出时多次看到建议将有角度的$ 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?

1 个答案:

答案 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;
    });
}