「this」がhttp promiseのtypescriptモジュールで定義されていない理由

Jキング:

これは私の最初のタイプスクリプトと角度のある試みであり、私は1つの問題に行き詰まっています。

次の方法で定義されたモジュールコントローラーがあります(.tsファイル)。

module app.controllers {
    "use strict"

    import services = app.services;

    export class calendarController {

        calBlock: any;
        deptId: number;
        calSvc: app.services.calendarService;

        static $inject = ["$scope", "calendarService"];

        constructor(isolateScope: directives.calendarScope, calSvc: services.calendarService) {

            this.deptId = isolateScope.deptId;
            this.calSvc = calSvc;

            calSvc.getMonthBlock(12, 2015, 1, this.deptId)
            .then(
                function (response) {
                    //promise fullfilled (regardless of outcome)                
                    this.calBlock = response.data;
                 },
                 function (error) {
                //handle errors
                    alert(error);
                 }   
             );
        }
    }
}

このコントローラーが依存するサービスは次のとおりです。

module app.services {
    "use strict"
    export class calendarService {

        private _http: ng.IHttpService;

        static $inject = ["$http"];

        constructor(http: ng.IHttpService) {
            this._http = http;            
        }

        getMonthBlock = function (month:number, year:number, calId:number, deptId:number) {

            //initialise service url
            var sURL = _sf.getServiceRoot('KrisisShifts') + "CalendarService/GetMonthCal/" + calId + "/" + deptId + "/" + month + "/" + year;
            //create config object for get function
            var config = {
                URL: sURL,
                method: "GET",
                dataType: 'json',
                headers: {
                    'ModuleId': _sf.getModuleId(),
                    'TabId': _sf.getTabId(),
                    'RequestVerificationToken': _sf.getAntiForgeryValue()
                }
            }
            //return the promise of the http.get function
            return this._http.get(sURL, config);

        }
    }
}

この問題は、コントローラモジュールの次の行で発生します。

this.calBlock = response.data;

問題は、ということです。これはとてもため、カルブロックも定義されていない定義されていないとjsConsoleでエラーが発生します:

TypeError:未定義のプロパティ 'calBlock'をshift-calendar-controller.js?cdv = 28:14に設定できません

私はjavascriptとAngularとTypescriptが比較的新しいので、「this」が未定義である理由を理解できません。関数に囲まれているからだと思います。

コントローラのtypescriptクラスのcalBlockプロパティにreponse.data($ http呼び出しからのjson配列)を割り当てる方法が必要です。誰かがこれが応答関数内で定義されていない理由と、それにアクセスする方法を理解するのに役立ちますか

ありがとう

編集:tymeJVの答えに基づくソリューション

以下は、書き換えられたcalBlock呼び出しです。

            calSvc.getMonthBlock(12, 2015, 1, this.deptId)
            .then((response) => {
                    //promise fullfilled (regardless of outcome)                
                    this.calBlock = response.data;
                },
            (error) => {
                    //handle errors
                    alert(error);
                }   
            );
tymeJV:

のコンテキストがthisコールバックで失われるためです。typescriptで矢印関数を使用して、コンテキストを保持します!

calSvc.getMonthBlock(12, 2015, 1, this.deptId).then((response) => {

})

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Typescriptモジュールが実行時に定義されていません

分類Dev

SciPyモジュール名と関数が定義されていない

分類Dev

同期として定義されていないメソッドでも、ノードの暗号モジュールがブロックされていますか

分類Dev

IIFEビューモデルが定義されていないようです

分類Dev

TypeScriptでJavaScript Node.jsモジュールが必要(allowJsが設定されていない)

分類Dev

Pythonモジュールで名前が定義されていません

分類Dev

ReferenceError:モジュールが定義されていません-Angular / LaravelアプリでのKarma / Jasmine設定

分類Dev

変数は定義されていますが、カーネルモジュールで使用されていないメッセージ

分類Dev

2つのモジュールで定義されているインターセプターが2回実行されるのはなぜですか?

分類Dev

Promise呼び出し内で「this」が定義されていない理由

分類Dev

すでに定義しているのに、AngularJSで「モジュール 'myControllers'が利用できません」と表示されるのはなぜですか?

分類Dev

次のコードで $scope が定義されていない理由

分類Dev

WPF MVVM OnPropertyChanged が定義されているが、他のビュー モデルに表示されない

分類Dev

モジュールをインポートすると、特定の変数が定義されていないというNameErrorが発生します(定義されている場合でも)

分類Dev

Typescript内部モジュールがVSCodeで認識されない

分類Dev

ジェストモジュールが定義されていません

分類Dev

XMLHttpRequestモジュールが定義されていない/見つかりません

分類Dev

モジュール名が定義されていません-ノードjs

分類Dev

$ window.jQueryは3パーティモジュールでは定義されていませんが、window.jQueryでは定義されていません

分類Dev

関数が定義されているモジュールをemacsで決定しますか?

分類Dev

モジュールパスが環境変数で定義された後でもPowershellモジュールがロードされない

分類Dev

webpackはts-loaderにtypescriptをバンドルしますが、getモジュールがブラウザで定義されていませんか?

分類Dev

module.exports "モジュールが定義されていません"

分類Dev

Uncaught ReferenceError:モジュールが定義されていません

分類Dev

変数が定義されているモジュールを取得します

分類Dev

Karma JasmineAngularJSモジュールが定義されていません

分類Dev

モジュールで定義されているがインポートされていないすべてのクラスを取得するにはどうすればよいですか?

分類Dev

オブジェクトがどのモジュールで定義されているかを確認するにはどうすればよいですか?

分類Dev

かみそりのページの部分ビュー:モデルが定義されていません

Related 関連記事

  1. 1

    Typescriptモジュールが実行時に定義されていません

  2. 2

    SciPyモジュール名と関数が定義されていない

  3. 3

    同期として定義されていないメソッドでも、ノードの暗号モジュールがブロックされていますか

  4. 4

    IIFEビューモデルが定義されていないようです

  5. 5

    TypeScriptでJavaScript Node.jsモジュールが必要(allowJsが設定されていない)

  6. 6

    Pythonモジュールで名前が定義されていません

  7. 7

    ReferenceError:モジュールが定義されていません-Angular / LaravelアプリでのKarma / Jasmine設定

  8. 8

    変数は定義されていますが、カーネルモジュールで使用されていないメッセージ

  9. 9

    2つのモジュールで定義されているインターセプターが2回実行されるのはなぜですか?

  10. 10

    Promise呼び出し内で「this」が定義されていない理由

  11. 11

    すでに定義しているのに、AngularJSで「モジュール 'myControllers'が利用できません」と表示されるのはなぜですか?

  12. 12

    次のコードで $scope が定義されていない理由

  13. 13

    WPF MVVM OnPropertyChanged が定義されているが、他のビュー モデルに表示されない

  14. 14

    モジュールをインポートすると、特定の変数が定義されていないというNameErrorが発生します(定義されている場合でも)

  15. 15

    Typescript内部モジュールがVSCodeで認識されない

  16. 16

    ジェストモジュールが定義されていません

  17. 17

    XMLHttpRequestモジュールが定義されていない/見つかりません

  18. 18

    モジュール名が定義されていません-ノードjs

  19. 19

    $ window.jQueryは3パーティモジュールでは定義されていませんが、window.jQueryでは定義されていません

  20. 20

    関数が定義されているモジュールをemacsで決定しますか?

  21. 21

    モジュールパスが環境変数で定義された後でもPowershellモジュールがロードされない

  22. 22

    webpackはts-loaderにtypescriptをバンドルしますが、getモジュールがブラウザで定義されていませんか?

  23. 23

    module.exports "モジュールが定義されていません"

  24. 24

    Uncaught ReferenceError:モジュールが定義されていません

  25. 25

    変数が定義されているモジュールを取得します

  26. 26

    Karma JasmineAngularJSモジュールが定義されていません

  27. 27

    モジュールで定義されているがインポートされていないすべてのクラスを取得するにはどうすればよいですか?

  28. 28

    オブジェクトがどのモジュールで定義されているかを確認するにはどうすればよいですか?

  29. 29

    かみそりのページの部分ビュー:モデルが定義されていません

ホットタグ

アーカイブ