2016-05-30 15 views
0

Wie kommt es, dass ich keinen Bereich für $scope außerhalb des Konstruktors habe, es sei denn, ich definiere meine Funktion mit dem Fettpfeil? Oder ist es möglich, auf $ scope zuzugreifen, ohne eine Funktion mit dem Fettpfeil zu definieren?

namespace FooBar { 
    export interface MyScope extends ng.IScope { 
     message: string; 
    } 

    export class SandboxCtrl { 
     static $inject = ["$scope", "$timeout"]; 
     private scope: MyScope; 
     private timeout: ITimeoutService; 
     constructor($scope: MyScope, $timeout: ng.ITimeoutService) { 
      this.scope = $scope; 
      this.timeout = $timeout; 
      timeout(this.foo, 1000); // does not work 
      timeout(this.bar, 1000); // works 
     } 

     public foo() { 
      this.scope.message = "foo bar"; // does not work 
     } 

     bar =() => { 
      this.scope.message = "foo bar"; // works 
     } 
    } 
} 

UPDATE ich bemerkte ich nicht das ganze Problem geteilt habe, wie ich es, weil $timeout Richtlinie nicht wusste, tat, war, die das Problem verursacht. Jedenfalls habe ich mein Beispiel aktualisiert.

+0

haben Sie DefinitelyTyped angualer Dateien Sie Projekt hinzufügen? – NinjaDeveloper

+0

@NinjaDeveloper ja, ich habe. – starcorn

Antwort

0

Ohne ins Detail zu gehen viel das Problem gelöst wird bind unter Verwendung this an die Funktion zu binden.

timeout(this.foo.bind(this), 1000); 
0

Try $scope als eine Eigenschaft in Ihrer Controller-Klasse zu definieren:

export class SandboxCtrl { 
     static $inject = ["$scope"]; 
     constructor(private $scope: MyScope) { 

     } 
    } 
+0

das ist identisch! https://github.com/palantir/tslint/issues/204 – starcorn

+0

Sie haben Recht. Ich benutze es oft, und die Funktionen, die ich erkläre, sind regelmäßig, keine Notwendigkeit für Fettsyntax. Soweit ich weiß, befasst sich Typoskript mit "dieser" Innenfunktionen - stellen Sie sicher, dass der Bereich der Controller ist. – AranS

Verwandte Themen