0

HTTP インジェクターとして使用したい Typescript クラス (コードを参照...) を作成しました。これはサービスとして (ファクトリではなく) Angular モジュールに追加されています。いくつかの問題に気づきました。

  1. クラスが「request」関数と「response」関数を大文字で定義すると、インジェクターは機能しません (これらの関数は呼び出されません)。小文字で定義すると、それらが呼び出されます。
  2. 関数が正しく呼び出されると、"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;
        }
    }
}

「リクエスト」と「レスポンス」に注目してください。前者が呼び出されます。後者はしません。

4

1 に答える 1

0

「リクエスト」と「レスポンス」に注目してください。前者が呼び出されます。後者はしません。

JavaScript では大文字と小文字が区別されます。Responseと同じではありませんresponse。小文字にしておく必要があります。

関数が正しく呼び出されると、"this" オブジェクトはオブジェクトではなくグローバル ウィンドウを参照します。

ファクトリで呼び出されないため、angular がファクトリclassであると想定するものに (少なくとも直接) を使用することはできません。したがって、角度は、提供された関数を期待されるのではなくとして呼び出します。最も簡単な答え: 関数を使用するだけです。newTokenInjectionService($rootScope)new TokenInjectionService($rootScope)

于 2015-06-22T00:18:25.597 に答える