今天就跟大家聊聊有关怎么在AngularJS对$http.post()函数进行封装,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
service('myHttpService', ['$http', function ($http) {
var myHttpPost = function (url, data, successFn, errorFn) {
}
return {
myHttp: function (url, data, successFn, errorFn) {
return myHttpPost(url, data, successFn, errorFn);
}
}
}]);
如上,我会return内部定义的方法,这个方法允许使用者定义successFn和errorFn,即相应成功和失败的回调,如此一来使用者大可放心的预先编写数据的处理逻辑,而无需关心其他细节。
另外,我允许使用者拿到更加灵活的post(),那么我是这样实现的:
var httpPromise = $http.post(url, data, {timeout: 30000});
if (!angular.isDefined(successFn)) {
return httpPromise;
}
如果使用者并没有定义成功回调,好吧,这层封装就当是不存在,我会把post()丢出去,由调用者自行处理。而如果调用者想预先定义的话,我应当在封装中处理好他们的逻辑:
return httpPromise.then(
function (response) {
if (response.status) {
return successFn(response);
} else {
/*其他处理*/
}
},
function (error) {
if (!angular.isDefined(errorFn)) {
/*其他处理*/
} else {
return errorFn(error);
}
},
function () {
/*无论何总情况下都应该被执行的逻辑*/
}
)
如此对于http.post()的封装基本上就算是完成了。其中有一个地方需要注意,如果我在处理successFn的时候,用了angular.isDefined()判断调用者是否定义了回调,如果没有,我将把处理权利交给调用者,如果已定义我将代为处理。其中then()方法比较有趣,因为http方法返回的是一个promise对象,在响应返回的时候可以通过then()来处理响应,其实完全可以通过promise.success()和promise.error()来处理不同响应状态的回调,但是用then()更好一些,因为它接收到的是完整的响应对象,而success()和error()会对响应对象进行解析,具体的差别读者可以通过console输出来看看。
看完上述内容,你们对怎么在AngularJS对$http.post()函数进行封装有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注天达云行业资讯频道,感谢大家的支持。