0

在我们的应用程序中,我们正在发出跨域请求,因此我们必须使用 CORS。由于 IE 以非标准方式执行此操作,我们创建了自己的服务(它依赖于$http非 IE 请求)来为我们处理所有这些。这一切都在这个应用程序中正常工作。但是,我们有一些非应用特定的库代码需要发出请求。因此,如果我们的库代码中的这些服务只是使用$http,则请求将无法在需要执行 CORS 的应用程序中工作。但是,我们不希望这些服务注入我们的 CORS 服务,因为这会破坏不执行跨域请求的应用程序中的请求。

话虽如此,我的最终目标是让库代码注入并$http用于所有必要的请求。然后,在特定的应用程序中,它可以定义如何$http工作。我最初以为我可以重新定义$http. 像这样的东西:

angular.module("myCorsApp").provider("$http", function() {
    return {
        $get: function(CORShttpService) {
            return CORShttpService;
        }
    }
});

但是,这会导致以下错误:

Circular dependency: CORShttpService <- $http <- $compile 

我不确定我是否了解循环依赖的来源。是否$compile依赖于提供者或其他东西?

我真正的问题是我是否以正确的方式进行。如果没有循环依赖,我认为这将完全实现我想要的。我可以采取一些解决方法来完成这项工作吗?有没有更好/更正确的方法来做到这一点?

如果它有帮助,则CORShttpService具有以下依赖项:$q、$rootScope、$http、$timeout。谢谢你的帮助。

4

1 回答 1

1

在 Angular 文档中挖掘了一堆之后,我决定这里最好的方法是“装饰”$http服务。这是通过服务的装饰器功能完成的$provide。所以,我最终得到了这样的东西:

angular.module("myCorsApp").config(function($provide) {
    $provide.decorator("$http", ["$delegate", "$q", "$rootScope", "$timeout", function($http, $q, $rootScope, $timeout) {
        return function(requestConfig) {
            //CORS logic using $http (basically what was the CORShttpService)
        }
    }]);
});
于 2013-04-10T19:02:28.813 回答