Использовать перехватчик HTTP при условии, установленном в $ rootScope - PullRequest
1 голос
/ 23 апреля 2019

Я определяю службу перехватчика HTTP, используя:

fooModule.service('myHttpInterceptor', function ($q, $rootScope) {
    // ...
})

Я могу вставить его в $ httpProvider в блоке config, и перехватчик работает и всегда включен:

.config(['$httpProvider', function($httpProvider) {
    $httpProvider.interceptors.push('myHttpInterceptor');
}]);

Но я не могу включить перехватчик на основе конфигурации, загруженной в $rootScope:

.config(['$httpProvider', function($httpProvider, $rootScope) {
    // $rootScope is undefined.

Если я использую .run вместо .config, янельзя использовать $httpProvider.

Как использовать перехватчик HTTP , только если установлена ​​переменная, найденная в $ rootScope?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2019

Как я могу использовать HTTP Interceptor, только если установлена ​​переменная, найденная в $ rootScope?

Чтобы избежать загрязнения $ rootScope, добавьте свойство к фабрике перехватчиков:

Напишите перехватчик, чтобы проверить свойство myInterceptEnable, прежде чем продолжить:

app.factory('myHttpInterceptor', function() {
  return {
    'myInterceptEnable': false,
    // optional method
    'request': function(config) {
      if (!this.myInterceptEnable) return config;
      // do something on success
      return config;
    },    
    // optional method
   'requestError': function(rejection) {
      if (!this.myInterceptEnable) throw rejection;
      // do something on error
      if (canRecover(rejection)) {
        return responseOrNewPromise
      }
      return throw rejection;
    },    
    // optional method
    'response': function(response) {
      if (!this.myInterceptEnable) return response;
      // do something on success
      return response;
    },    
    // optional method
   'responseError': function(rejection) {
      if (!this.myInterceptEnable) throw rejection;
      // do something on error
      if (canRecover(rejection)) {
        return responseOrNewPromise
      }
      return throw rejection;
    }
  };
});

Перехватчик затем можно включить или выключить, установив myHttpInterceptor.myInterceptEnable либо true или false.

app.run(function(myInterceptor) {
    myInterceptor.myInterceptEnable = true;
});
1 голос
/ 23 апреля 2019

Вы не можете - вы можете только вводить провайдеров для настройки функций, потому что они запускаются до создания зависимостей.

Но вместо этого вы можете изменить myHttpInterceptor, чтобы проверить свойство в корневой области, прежде чем выполнять какую-либо из его пользовательских логик перехватчика. Таким образом, перехватчик просто не будет ничего делать, когда свойство не установлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...