La clase de interceptor http angularjs (ES6) pierde el enlace a 'esto'
Estoy construyendo y la aplicación AngularJS usando clases ES6 con traceur transpiling a ES5 en formato AMD.
en mi módulo importo la clase interceptor y la registro como un servicio, y luego registro este servicio con los $ httpProvider.interceptors en 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');
});
Mi clase de interceptor inyecta ambos$ q y el$ ventana servicios, los guarda en el constructor para su uso posterior. Seguí esta parte con el depurador y la inyección está ocurriendo correctamente:
'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;
Cuando hago una solicitud que responde con un401 el interceptor se dispara adecuadamente, pero en el método 'responseError' la variable 'this' apunta al objeto de la ventana y no a mi interceptor, por lo tanto, no tengo acceso aesto. $ q oesto. $ ventana.
¿No puedo entender por qué? ¿Algunas ideas?