我想知道我们是否可以在angularjs中创建一个将取代$ http操作的提供程序。这意味着我们可以在其他模块中使用此提供程序,我们可以使用这些$ http操作。 必须采用提供者的原因是因为我们可以配置http参数,如api路径,请求类型。
我们也可以在提供程序中使用日志/异常处理机制,以便继承提供程序的模块(例如:任何其他工厂)不需要执行任何额外的日志记录/异常机制。 在发出http请求时,是否有任何方法可以使用此提供程序进行加载?
答案 0 :(得分:4)
对于您提到的内容,您不需要其他提供商,因为 $http
具有拦截器的概念。
拦截器可以指定在不同阶段执行的不同回调:
请求(在发送任何请求之前运行):它可以修改配置(例如请求URL,方法等)。它还可以用于显示一些加载消息/动画(例如,使用$rootScope
上的某些属性)。
requestError (在发送请求之前发生错误时运行):它可用于记录,恢复,异常处理。
响应(在收到任何响应后运行):它可用于记录。它还可以用于隐藏加载消息/动画。 (不要忘记在响应错误时处理此问题。)
responseError (当响应出错时运行(例如错误请求)):它可用于记录,恢复,异常处理。
如果拦截器无法满足您的需求,您可以使用 $provide
的装饰器来修补,增强或完全替换$http
服务:< / p>
.config(function ($provide) {
$provide.decorator('$http', function ($delegate) {
var newHttp = $delegate; // or a totally new object
// ...monkey-patch newHttp or define new methods or whatever
return newHttp;
});
});