2016-05-12 7 views
0

角度コントローラでTypeScriptを使用し、スコープlike this oneでメソッドをアタッチする例をいくつか見てきました。TypeScriptとcontrollerAsを使用してコントローラにメソッドをアタッチ

ただし、controllerAsを使用する方が良い方法です。

class exampleCtrl { 

    public publicArray = [1,2,3]; 

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

} 

これは生成:次の活字体(それが正しく等他所コントローラとして登録されたと仮定して)考える

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

somePublicMethodプロトタイプに追加されたかに注意してくださいさらにpublicArraythisに直接追加されます。

私が知る限り、プロトタイプに追加されたメソッドは、controllerAsを使用してDOMを介して利用することはできません。

例えば

<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> 

は、どのように私は今、DOM経由somePublicMethodにアクセスすることができますか? 代わりに、ControllerAs構文を使用しているときに、TypeScript(ES6)クラスのパブリック関数をパブリックにアクセスできるようにするにはどうすればよいですか?

plunker私が見ていることを示す。


その他の見所:

私はあなたが誤ってそれを使用する場合、それはあなたに警告し、publicprivateprotectedが実際にコードがtranspiled方法を変更しないでください知っています。

答えて

2

それは私の知る限り

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

で、プロトタイプに追加されたメソッドはcontrollerAsを使用してDOMを経由して利用できません。

です。これがJSプロトタイプの仕組みです。

+0

Oh whoops、孤立した例を作成すると単純なエラーが発生します。私はそれが事実だと思った。それが可能であることを知って価値がある。私はそこに私のアプリのどこかに問題があると思う。ありがとう。 –

関連する問題