angularjs http interceptor class (ES6) perde a ligação para 'this'
Estou criando um aplicativo AngularJS usando classes ES6 com rastreamento de transpilação para ES5 no formato AMD.
no meu módulo, importo a classe interceptora e a registro como um serviço e, em seguida, registro esse serviço com os $ httpProvider.interceptors em module.config:
var commonModule = angular.module(moduleName, [constants.name]);
import authenticationInterceptor from './authentication/authentication.interceptor';
commonModule.service('authenticationInterceptor', authenticationInterceptor);
commonModule.config( $httpProvider => {
$httpProvider.interceptors.push('authenticationInterceptor');
});
Minha classe de interceptores injeta ambos$ q e a$ window serviços, os salva no construtor para uso posterior. Eu segui esta parte com o depurador e a injeção está acontecendo corretamente:
'use strict';
/*jshint esnext: true */
var authenticationInterceptor = class AuthenticationInterceptor {
/* ngInject */
constructor($q, $window) {
this.$q = $q;
this.$window = $window;
}
responseError(rejection) {
var authToken = rejection.config.headers.Authorization;
if (rejection.status === 401 && !authToken) {
let authentication_url = rejection.data.errors[0].data.authenticationUrl;
this.$window.location.replace(authentication_url);
return this.$q.defer(rejection);
}
return this.$q.reject(rejections);
}
}
authenticationInterceptor.$inject = ['$q', '$window'];
export default authenticationInterceptor;
Quando faço uma solicitação que responde com um401 o interceptador é acionado adequadamente, mas no método 'responseError' a variável 'this' aponta para o objeto window e não para o meu interceptor, portanto, não tenho acesso aisso. $ q ouessa janela. $.
Eu não consigo descobrir o porquê? Alguma ideia?