HTTP インジェクターとして使用したい Typescript クラス (コードを参照...) を作成しました。これはサービスとして (ファクトリではなく) Angular モジュールに追加されています。いくつかの問題に気づきました。
- クラスが「request」関数と「response」関数を大文字で定義すると、インジェクターは機能しません (これらの関数は呼び出されません)。小文字で定義すると、それらが呼び出されます。
- 関数が正しく呼び出されると、"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;
}
}
}
「リクエスト」と「レスポンス」に注目してください。前者が呼び出されます。後者はしません。