1

我正在实现一个 angularjs 服务,它将$http调用发送的数据保存在localStorage. 为了做到这一点,我使用了请求拦截器,这样每当通过 发送 http 请求时$http,数据就会保存在localStorage. 下面是我的拦截器代码,

var OfflinkJs = angular.module('OfflinkJs', []);

OfflinkJs.factory('cacheInterceptor', function () {
    var cacheInterceptor = {
        request: function (config) {
            // Here I am saving the config as a string in localstorage
            return config;
        }
    };
    return cacheInterceptor;
});

为了使上述拦截器正常工作,我必须将其注册interceptors$httpProvider. 我这样做是为了实现这一点,

OfflinkJs.config(['$httpProvider', function ($httpProvider) {
    $httpProvider.interceptors.push('cacheInterceptor');
}]);

问题

现在,当我OfflinkJS在另一个模块中使用模块时,所有$http调用都通过我的拦截器。但是我想让$http服务发送的一些请求使用我的拦截器,而其他一些请求则不使用。

由于$http服务是一个单例,我无法弄清楚如何在我的应用程序的不同位置使用它的两个实例。有什么办法可以做到这一点?

我经历了这个问题,但似乎它确实解决了循环依赖的问题

我需要 AngularJS $http 服务的两个实例还是什么?

4

1 回答 1

0

我检查拦截器中的 URL 并使用它来过滤对其他服务的请求。我在我的模块中将我的服务的基本 url 设置为一个常量,然后检查它。如果请求不是针对相关服务的,它只是通过而没有任何操作。

但也许更好的方法是设置数据服务而不是拦截器。有很多关于数据服务的教程。

于 2015-08-31T15:34:46.553 回答