Как внедрить мой сервис в перехватчик? - PullRequest
0 голосов
/ 09 января 2019

Я создал перехватчик следующим образом:

(function() {
    'use strict';
    angular.module('sbApp').factory('ErrorResponseInterceptor', ErrorResponseInterceptor).config(ErrorResponseInterceptorConfig);

    ErrorResponseInterceptorConfig.$inject = [ '$httpProvider' ];
    ErrorResponseInterceptor.$inject = [ '$rootScope', '$q', '$injector'];

    function ErrorResponseInterceptorConfig($httpProvider) {
        $httpProvider.interceptors.push('ErrorResponseInterceptor');
    }

    function ErrorResponseInterceptor($rootScope, $q, $injector) {
    // Here I handle my http responses

    }
})();

У меня есть другой сервис, определенный в файле myService.js Я хочу использовать методы этого сервиса в перехватчике выше, поэтому я сделал следующие изменения в приведенном выше коде:

(function() {
    'use strict';
    angular.module('sbApp').factory('ErrorResponseInterceptor', ErrorResponseInterceptor).config(ErrorResponseInterceptorConfig);

    ErrorResponseInterceptorConfig.$inject = [ '$httpProvider' ];
    ErrorResponseInterceptor.$inject = [ '$rootScope', '$q', '$injector', 'myService'];

    function ErrorResponseInterceptorConfig($httpProvider) {
        $httpProvider.interceptors.push('ErrorResponseInterceptor');
    }

    function ErrorResponseInterceptor($rootScope, $q, $injector, myService) {
        // Here I handle my http responses

    }
})();

Я получил следующую ошибку:

Uncaught Error: [$injector:unpr] Unknown provider: myServiceProvider <- myService <- ErrorResponseInterceptor <- $http <- $translateStaticFilesLoader

myService.js код:

(function() {
    'use strict';
    angular.module('sbApp').factory('myService', myService);

    myService.$inject = [ '$rootScope', '$http', 'restAPIService', '$log',
            '$filter', '$interval', '$location' ];

        function myService($rootScope, $http, restAPIService, $log, $filter,
                $interval, $location) {
                ......
            return {
                add : add,
            };
            .....
            function add(module, event) {
            var e = {
              ..........
            }
            .......     
                return $rootScope.myarray.push(e);
            }

        }
    })();

Разрешено ли использовать myService в перехватчике, как я могу передать его перехватчику?

1 Ответ

0 голосов
/ 09 января 2019

Чтобы получить экземпляр объекта службы внутри перехватчика, используйте:

 $injector.get('serviceName');

Пожалуйста, попробуйте что-то вроде этого:

(function() {
    'use strict';
    angular.module('sbApp').factory('ErrorResponseInterceptor', ErrorResponseInterceptor).config(ErrorResponseInterceptorConfig);

    ErrorResponseInterceptorConfig.$inject = [ '$httpProvider' ];
    ErrorResponseInterceptor.$inject = [ '$rootScope', '$q', '$injector'];

    function ErrorResponseInterceptorConfig($httpProvider) {
        $httpProvider.interceptors.push('ErrorResponseInterceptor');
    }

    function ErrorResponseInterceptor($rootScope, $q, $injector) {
        var myService = $injector.get('myService');
        // Here I handle my http responses

    }
})();
...