简体   繁体   English

Angular TypeScript服务,这是未定义的

[英]Angular TypeScript service this is undefined

Here is my Angular TypeScript Interceptor : 这是我的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);
       }
     }
   }

Here is my module where I am registering as service. 这是我注册为服务的模块

   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');
}]);

When the app starts running, the interceptor constructor initializing the $q service , but when it goes to the method request where I am use this keyword, browser says this is undefined. 当应用程序开始运行时,拦截器构造函数将初始化$ q服务 ,但是当转到使用关键字的方法请求时,浏览器会说是未定义的。 Can anyone tell me where I am doing the mistake. 谁能告诉我我在哪里做错了。

And Here is my transpiled code for interceptor 这是我为拦截器编译的代码

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 = {}));

Module 模组

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 };

try using an arrow function that maintains a reference as "this" to the container object or rather interceptor: 尝试使用箭头功能将对容器对象或拦截器的引用保持为“ this”:

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

For background see: Lambdas and using 'this' @ http://www.typescriptlang.org/Handbook#functions 有关背景,请参见: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