![](/img/trans.png)
[英]Angular service written in typescript is undefined inside controller
[英]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.