2016-05-10 7 views
1

Ich habe das folgende Problem. Wenn ich eine Klasse in ionischen mit Winkel haben kann ich Winkel Dienste im Konstruktor zugreifen, nachdem sie die Injektion:Wie stelle ich Dienste außerhalb des Konstruktors in eckig zur Verfügung?

export class HomeController { 
    static $inject = [ 
     '$scope', 
     '$state' 
    ]; 

    constructor(
     public $scope : any, 
     public $state : any 
    ) { 
     this.$state.go('test'); 
     this.$scope.changeController = this.changeController; 
    } 

    changeController() { 
     console.log("change controller"); 
    }; 
} 

Jedoch, wenn ich es auf die Änderung Controller-Funktion ändern, ist es nicht

export class HomeController { 
    static $inject = [ 
     '$scope', 
     '$state' 
    ]; 

    constructor(
     public $scope : any, 
     public $state : any 
    ) { 
     this.$scope.changeController = this.changeController; 
    } 

    changeController() { 
     console.log("change controller"); 
     this.$state.go('test'); // Fails here 
    }; 
} 
funktioniert

Dies ist der Fehler:

Error: undefined is not an object (evaluating 'this.$state.go')

Was kann ich tun?

Obendrein ist es richtig, fügen Sie dem Bereich die Funktion changeController hinzu oder gibt es eine einfachere Methode, um sie für eine Vorlage verfügbar zu machen?

Thx im Voraus

+0

Vielleicht ist 'das' was undefined. Hast du 'changeController() => {...}' ausprobiert? – iberbeu

Antwort

1

In Ihrem Fall wird der Wert von this ist falsch, die ein sehr häufiges Problem ist aufgrund von Missverständnissen ES6 Klassen. Versuchen Sie, Lambda zu verwenden, um lexikalisches Scoping zu haben:

changeController =() => { 
    console.log("change controller"); 
    this.$state.go('test'); // Fails here 
    }; 
+0

das funktioniert wie ein Charme :) – acloD128

Verwandte Themen