2017-07-05 66 views
0

我有用TypeScript編寫的服務。喜歡的東西:Typescript AngularJS'this'is undefined

export default class AServiceClass { 

    constructor(private $http: ng.IHttpService, ...) {} 

    method1(data : any) : void { 
     this.$http(...) 
    } 

    method2(data : any) : void { 
     this.$http(...) 
    } 
} 

而且我有一個控制器類,利用此服務:

export default class AControllerClass { 

    constructor(private aService: AServiceClass, ...) {} 

    $onInit(){ 

     let method = true ? this.aService.method1 : this.aService.method2; 
     method({ ... data ... }); 
    } 
} 

服務方法拋出一個異常 - this is undefind。如果我使用它像this.aService.method1({ ... data ... }),一切都很好。 Ofc我可以做method.bind(aService)({ ... data ... })method.call(aService, { ... data ... }),但爲什麼有一個範圍差異?

Thx。

+0

這個$ OnInit的,而不是$ ngInit,應該工作。不確定角1對我來說已經有點回頭了,但試試吧。這個。$ onInit = function(){你的代碼}; – Doomenik

+0

啊,這是一個例子中的錯誤,ofc $ onInit。 Thx – Kindzoku

+0

它仍然會拋出「這是未發現的」? – Doomenik

回答

1

您的method1方法在沒有上下文的情況下被調用,所以this在它內部將是未定義的。你必須與aService對象上下文調用或明確使用callapply設置上下文或明確綁定使用bind背景:

this.aService.method1(); // `this` will be aService inside `method1` 

method.call(aService, args); 

method.apply(aService, [args]); 

// Or bind using `bind`: 

let method = true ? this.aService.method1.bind(this.aService) : this.aService.method2.bind(this.aService); 

method(); 
+0

啊,thx。不知道這一點。羞愧。 :) – Kindzoku

相關問題