如何使用 $resource 将服务依赖注入到拦截器中

How to do Dependency Injection of a service into an interceptor, using $resource

我尝试了以下方法:

$resource(ur'stuff/:thingId',
  {
    someMethod:{
      method: 'GET',
      interceptor: ['OtherService', function(Otherservice){
         console.log('Too bad, not executed...');
         return {
          response: (response) => {
            console.log('Too bad, not executed...');
          }
        }
      }]

    }
  }

)

但是不行。我发现有人提到 $resource 与 $http 相比有特殊性,但我找不到合适的模式。

你不能直接用拦截器注入服务,而是应该将$resource包装在工厂或服务中,然后可以使用工厂依赖到$resource.interceptor中使用。

示例如下:

angular.module('mainModule', ['ngResource']).
factory("MyResource", ['$resource', 'SomeService', function ($resource, SomeService) {
    return $resource(
        '/', {
        someMethod: {
            method: 'GET',
            interceptor: {
                response: function (data) {
                    // here you can use SomeService
                    console.log('response in interceptor', data);
                },
                responseError: function (data) {
                    // here you can use SomeService
                    console.log('error in interceptor', data);
                }
            }
        }
    }

    );
}]);

ES6方式导入服务方式:

import mainModule from './mainModule';

class SomeController {
    constructor($scope, SomeService) {
        this.$scope = $scope;
        this.SomeService= SomeService;
    }
}

SomeController.$inject = ['$scope', 'SomeService'];

mainModule.controller('SomeController', SomeController);

以类似的方式,您也可以创建工厂和服务。