2016-05-12 2 views
0

Ich habe ein paar Beispiele für die Verwendung von TypeScript mit einem Winkel-Controller und Anfügen von Methoden über den Geltungsbereich like this one gesehen.Anfügen Methode an Controller mit TypeScript und ControllerAs

Allerdings ist es jetzt besser, controllerAs zu verwenden.

folgendes Typoskript Given (vorausgesetzt, es als Controller an anderer Stelle usw. korrekt registriert wurde):

class exampleCtrl { 

    public publicArray = [1,2,3]; 

    public somePublicMethod() { 
     window.console.log('ran function') 
    } 

} 

Dies erzeugt:

var exampleCtrl = (function() { 
    function exampleCtrl() { 
     this.publicArray = [1, 2, 3]; 
    } 
    exampleCtrl.prototype.somePublicMethod = function() { 
     window.console.log('ran function'); 
    }; 
    return exampleCtrl; 
}()); 

Beachten Sie, wie somePublicMethod zum Prototyp hinzugefügt wurde und publicArray wird direkt zu this hinzugefügt.

Soweit ich sagen kann, sind Methoden, die dem Prototyp hinzugefügt wurden, nicht über das DOM mit ControllerAs verfügbar.

beispiels

<div ng-controller="exampleCtrl as vm"> 
    {{vm}} <!-- No function is output just {"publicArray":[1,2,3]} --> 
    <div ng-click="vm.somePublicMethod">Click me</div> <!-- click event doesn't work --> 
</div> 

Wie kann ich jetzt somePublicMethodüber das DOM? Oder, wie kann ich eine öffentliche Funktion in einer TypeScript (ES6) -Klasse öffentlich zugänglich machen, wenn Sie ControllerAs Syntax verwenden?

plunker zu zeigen, was ich sehe.


Andere Punkte:

Ich weiß public, private und protected nicht wirklich die Art und Weise der Code transpiled ist, warnt Sie nur, wenn Sie es falsch verwenden.

Antwort

2

Es ist

<div ng-click="vm.somePublicMethod()">Click me</div> 

Soweit ich das beurteilen kann, hinzugefügt Methoden zum Prototyp sind über das DOM mit controllerAs nicht zur Verfügung.

Sie sind. So funktionieren JS-Prototypen.

+0

Oh whoops, einfacher Fehler bei der Herstellung eines isolierten Beispiels. Ich dachte, das wäre der Fall. Gut zu wissen, dass es möglich ist. Ich vermute, dass es anderswo in meiner App ein Problem gibt. Vielen Dank. –