我的问题是,鉴于拦截器的强大功能,包装$http服务是否有意义,以便我所有其他代码只调用该包装器.现在拦截器可以很容易地完成标头/异常处理等基本任务.虽然我现在无法想到一个有效的用例,但是我们只是为了屏蔽任何未来的api更改等等$http?或者可能以后迁移到$ resource?
另请注意,这里我讨论的是围绕$http方法的基本包装器服务,而不是像DataService这样的客户端服务,方法是sendData,receiveData包装$http调用.请在下面找到示例代码 -
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
};
}]);
Run Code Online (Sandbox Code Playgroud)
现在,所有其他的代码将使用myhttpwrapper的myGet,myPost方法代替$http的GET,POST方法.希望它有意义!
[编辑]我们肯定会使用的用例是截取添加标题,日志记录和日志记录,异常处理等响应的请求.但我确信这些可以由拦截器处理.后来从$ http移动到$ resource目前尚不清楚.
谢谢.
Flo*_*ian 15
对于您描述的具体情况,我建议不要包装$http.这样做并没有真正的好处.
这可以发挥作用的情况是你想要一个更"说"的API.假设你有User一个系统和Address(es).您将其描述为基于数据的服务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;
}
}
}]);
Run Code Online (Sandbox Code Playgroud)
这允许您使用呼叫参数.无论何时你必须改变路线,你都只有一个地方可以改变它们(如果你有十几个控制器发出$http请求,这将是非常糟糕的).
$resource如果您(也实际上有兼容的资源),您也可以使用此处.这里的决策因素应该是可读性,可重用性和以后易于更改.
所以,如果你只是在那里进行这些调用并且路由永远不会改变,那么继续$http直接使用,而不使用包装器.在增长的应用程序中,我认为这不太可能.
| 归档时间: |
|
| 查看次数: |
6987 次 |
| 最近记录: |