我有一个拦截器,我正在配置加载ajax微调器。
interface IInterceptorScope extends angular.IRootScopeService {
loading: number;
}
export class Interceptor {
public static Factory($q: angular.IQService, $rootScope : IInterceptorScope) {
return new Interceptor($q, $rootScope);
}
constructor(private $q: angular.IQService, private $rootScope: IInterceptorScope) {
this.$rootScope.loading = 0;
}
public response(response) {
console.log(response);
this.$rootScope.loading = 1;
return response || this.$q.when(response);
}
public responseError(rejection) {
console.log(rejection.status);
if (rejection.status === 401) {
}
return this.$q.reject(rejection);
}
}
我收到此错误:
$q
也未定义。我不确定为什么。有人可以帮忙吗?
编辑:这就是我在config()
块中添加拦截器的方法,减去其他参数,它看起来像这样:
.config($httpProvider : angular.IHttpProvider) => {
$httpProvider.interceptors.push(Interceptor.Factory);
}
注册工厂:
.factory('Interceptor', Interceptor)
作为参考,我在这里看第一个答案:
AngularJS global $http state ajax loader
$rootScope
在这里有loading属性,但这是用纯JavaScript,所以我不确定它是否与TypeScript在这里的方式有关。
答案 0 :(得分:6)
Angular调用response
方法而不设置this
;要使用TypeScript处理此问题,请使用函数属性捕获this
,如:
public response = (response) => {
console.log(response);
this.$rootScope.loading = 1;
return response || this.$q.when(response);
}
同样适用于responseError
。