我的问题是,鉴于拦截器的强大功能,包装$http
服务是否有意义,以便我所有其他代码仅调用该包装器。现在,拦截器可以轻松完成诸如标头/异常处理之类的基本任务。因此,尽管我现在无法想到一个有效的用例,但可以说只是为了防止将来的任何api更改等$http
?或者稍后再迁移到$ resource?
还请注意,这里我说的是围绕$http
的方法提供的基本包装服务,而不是诸如DataService之类的客户端服务,该服务具有包装$http
调用的方法sendData,receiveData 。请在下面找到示例代码-
angular.module(‘myapp’).factory(‘myhttpwrapper’, ['$http', function (http) {
return {
myGet: function (getUrl) {
return http.get(getUrl);
},
myPost: function (postUrl, data) {
return http.post(postUrl, data);
},
// other $http wrappers
};
}]);
现在,所有其他的代码将使用myhttpwrapper的myGet
,myPost
方法代替$http
的GET,POST方法。希望有道理!
[编辑]我们肯定会用到哪些用例,以拦截添加标头,记录日志的请求,以及记录日志的响应,异常处理等。但是我确信这些可以由拦截器处理。现在尚不知道从$ http到$ resource的转移。
谢谢。
对于您描述的特定情况,建议不要使用包装$http
。这样做并没有真正的收获。
在这种情况下,您可能需要一个更“讲”的API。假设您User
的系统中有一个或多个Address
。您将其描述为基于数据的服务DataService
:
var app = angular.module("users", []);
app.service("User", ['$http', '$q', function(http, q) {
return {
getAddress: function(user) {
var address = q.defer();
http.get("/user/" + user.id + "/address").then(function(data) {
address.resolve(data);
}, function(err) {
address.reject(err);
});
return address.promise;
},
getUser: function() {
var user = = q.defer();
http.get("/user/address").then(function(data) {
user.resolve(data);
}, function(err) {
user.reject(err);
});
return user.promise;
}
}
}]);
这使您可以使用参数进行呼叫。每当需要更改路线时,都只能在一个地方更改它们(例如,如果您有十几个控制器发出$http
请求,那真是太糟糕了)。
您也可以使用$resource
此处(如果您确实有兼容的资源)。这里的决策因素应该是可读性,可重用性和以后的更改方便性。
因此,如果您仅在进行这些呼叫的地方,而路由却从未改变,请继续使用$http
直接使用方法,而无需使用包装器。在不断增长的应用程序中,我认为这不太可能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句