簡體   English   中英

Angular TypeScript服務,這是未定義的

[英]Angular TypeScript service this is undefined

這是我的Angular TypeScript 攔截器

export module httpMock_interceptor {
  export class Interceptor  {
      static $inject: string[] = ['$q'];
      constructor(public $q: ng.IQService) {}
       public request(config: any) {
         console.log(this);
       }
     }
   }

這是我注冊為服務的模塊

   import {httpMock_interceptor as interceptor} from './httpMock.interceptor';
   var httpMock: ng.IModule = angular.module("httpMockTs", []);
   httpMock.service("httpMockInterceptor",interceptor.Interceptor);
   httpMock.config.$inject = ['$httpProvider'];
   httpMock.config(['$httpProvider', function ($httpProvider:  ng.IHttpProvider) {
$httpProvider.interceptors.unshift('httpMockInterceptor');
}]);

當應用程序開始運行時,攔截器構造函數將初始化$ q服務 ,但是當轉到使用關鍵字的方法請求時,瀏覽器會說是未定義的。 誰能告訴我我在哪里做錯了。

這是我為攔截器編譯的代碼

export var httpMock_interceptor;
 (function (httpMock_interceptor) {
   class Interceptor {
    constructor(_q) {
        this._q = _q;
    }
    request(config) {
        console.log(this);
    }
   }
Interceptor.$inject = ['$q'];
httpMock_interceptor.Interceptor = Interceptor;
})(httpMock_interceptor || (httpMock_interceptor = {}));

模組

import { httpMock_interceptor as interceptor } from './httpMock.interceptor';
var httpMock = angular.module("httpMockTs", []);
httpMock.service("httpMockInterceptor", interceptor.Interceptor);
httpMock.config.$inject = ['$httpProvider'];
httpMock.config(['$httpProvider', function ($httpProvider) {
    $httpProvider.interceptors.unshift('httpMockInterceptor');
}]);
export { httpMock };

嘗試使用箭頭功能將對容器對象或攔截器的引用保持為“ this”:

 public request = (config: any) => { console.log(this); } 

有關背景,請參見:Lambdas和使用'this'@ http://www.typescriptlang.org/Handbook#functions

根據文檔 ,攔截器應該是一個函數,該函數返回具有諸如request屬性的對象文字,因此我猜想在沒有任何this對象的情況下直接調用request函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM