【发布时间】:2014-01-14 22:10:00
【问题描述】:
我在用普通的 TypeScript 编写有角度的 http 拦截器时遇到了麻烦。我要转换的代码如下:
.config(['$httpProvider', function ($httpProvider) {
var interceptor = ['$rootScope', '$q', 'httpBuffer', function ($rootScope, $q, httpBuffer) {
function success(response) {
return response;
}
function error(response) {
if (response.status === 401 && !response.config.ignoreAuthModule) {
var deferred = $q.defer();
httpBuffer.append(response.config, deferred);
$rootScope.$broadcast('event:auth-loginRequired', response);
return deferred.promise;
}
// otherwise, default behaviour
return $q.reject(response);
}
return function (promise) {
return promise.then(success, error);
};
}];
$httpProvider.responseInterceptors.push(interceptor);
}])
第一部分很清楚,编写一个带有构造函数的类,该构造函数接受三个依赖项$rootScope、$q 和httpBuffer。还要写两个私有方法success和response。
class MyInterceptorClass {
constructor(private $rootScope: ng.IRootScopeService, private $q: ng.IQService, private httpBuffer: HttpBuffer) {
}
private success(response: ng.IHttpPromiseCallbackArg<any>): ng.IHttpPromiseCallbackArg<any> {
return response;
}
private error(response: ng.IHttpPromiseCallbackArg<any>): ng.IHttpPromiseCallbackArg<any> {
if (response.status == 401 && !((<any>response.config).ignoreAuthModule)) {
var deferred = this.$q.defer();
this.httpBuffer.append(response.config, deferred);
this.$rootScope.$broadcast('event:auth-loginRequired', response);
return deferred.promise;
}
// Otherwise, default behavior
return this.$q.reject(response);
}
}
拦截器的注册也要明确:
.config(['$httpProvider', ($httpProvider: ng.IHttpProvider)=> {
$httpProvider.responseInterceptors.push(['$rootScope', '$q', 'httpBuffer', MyInterceptorClass]);
}]);
我遇到的问题是原始 JavaScript 的最后一部分,即匿名函数的返回值。我将如何在 TypeScript 中创建它?据我了解,这将是 TypeScript 中的无名方法,但这是不可能的。
【问题讨论】:
标签: javascript angularjs typescript