2017-07-05 3 views
0

Ich habe einen Service mit TypeScript geschrieben. Etwas wie:Typescript AngularJS 'dies' ist undefined

export default class AServiceClass { 

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

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

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

Und ich habe eine Controller-Klasse, die diesen Dienst nutzen:

export default class AControllerClass { 

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

    $onInit(){ 

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

Servicemethoden werfen eine Ausnahme - this is undefind. Wenn ich es wie this.aService.method1({ ... data ... }) benutze, ist alles in Ordnung. Ofc kann ich method.bind(aService)({ ... data ... }) oder method.call(aService, { ... data ... }) tun, aber warum gibt es einen Unterschied im Bereich?

Thx.

+0

diese statt $ ngInit OnInit $ sollte, arbeiten. Nicht sicher, Winkel 1 ist schon ein bisschen zurück für mich, aber versuchen Sie es. dies. $ onInit = function() {Ihr Code}; – Doomenik

+0

Ah, es war ein Tippfehler im Beispiel von $ onInit. Thx – Kindzoku

+0

Noch wirft es "das ist nicht gelöst"? – Doomenik

Antwort

1

Ihre method1 Methode wird ohne Kontext aufgerufen, so dass this darin nicht definiert ist. Sie haben es mit dem als Kontext aService Objekt aufrufen oder setzen explizit den Kontext call oder apply oder explizit binden den Kontext mit bind mit:.

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

Ah, thx. Weiß das nicht. Beschämt. :) – Kindzoku

Verwandte Themen