我有一个名为的服务$doggedHttp,它公开了相同的接口$http.现在我想创建一个$doggedResource服务,它是角度$resource服务$doggedHttp而不是$http.在其他的话,我想注入$doggedHttp的$http服务.
此外,在我的应用程序中,我希望能够创建$doggedResource和$resource.因此,我不能简单地覆盖$http有$doggedHttp.
我认为依赖注入应该使这个场景很容易解决.我错了吗 ?
相反,我不得不深入研究角度源代码,最终提出了一个非常难看的解决方案:
angular.module('doggedResource', ['ngResource', 'doggedHttp'])
.config(function() {
var ngResource = angular.module('ngResource'),
doggedResource = angular.module('doggedResource');
// replace the placeholder below with the $resource factory from ngResource
doggedResource._invokeQueue[1][2][1][2] = ngResource._invokeQueue[0][2][1][2];
})
.factory('$doggedResource', ['$doggedHttp', '$parse', null /* this is just a placeholder */]);
Run Code Online (Sandbox Code Playgroud)
有更好的解决方案吗?
注意我们不能$provide.decorator用来替换注入的$http服务.为了说明这个问题,这里是angular-resource.js的相关部分:
angular.module('ngResource', ['ng']).
factory('$resource', ['$http', '$parse', …Run Code Online (Sandbox Code Playgroud)