我创建了一个我想用作 HTTP 注入器的 Typescript 类(参见代码...)。它作为服务(而不是工厂)被添加到 Angular 模块中。我注意到了一些问题。
- 当类用大写字母定义“请求”和“响应”函数时,注入器不起作用(这些函数永远不会被调用)。当用小写字母定义时,它们被调用。
- 当函数被正确调用时,“this”对象指的是全局窗口而不是对象。
我通过创建真正的工厂(参见代码...)并将其作为工厂添加到 Angular 模块中解决了这个问题。
但是,我很想了解为什么会这样。有什么想法吗?
module KernEquity.Angular
{
export interface IHttpInjector
{
request(request: ng.IRequestConfig): ng.IRequestConfig;
response(response: any):any;
}
export function TokenInjectorFactory($rootScope:KernEquity.Angular.IRootScope):IHttpInjector
{
var injector = {
request: function (config:ng.IRequestConfig)
{
if ($rootScope.IsAuthenticated)
{
config.headers["Authorization"] = this.$rootScope.BearerToken.GetTokenHeader();
}
return config;
},
response: function (response:any)
{
return response;
}
}
return injector;
}
export class TokenInjectionService
{
$rootScope: KernEquity.Angular.IRootScope;
static $inject = ["$rootScope"];
constructor($rootScope:KernEquity.Angular.IRootScope)
{
this.$rootScope = $rootScope;
}
request(config: ng.IRequestConfig):ng.IRequestConfig
{
this.$rootScope = null;
return config;
}
Response(response: any):any
{
return response;
}
}
}
注意“请求”与“响应”。前者将被调用。后者不会。