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

时间:2017-05-10 10:19:48

标签: angularjs angular-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...');
          }
        }
      }]

    }
  }

)

但它不起作用。我发现有人提到$资源与$ http相比具有特殊性,但我找不到合适的模式。

1 个答案:

答案 0 :(得分:1)

你不能直接用拦截器注入服务,而应该在工厂或服务中包装$ 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);

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