2016-12-20 7 views
1

スタックオーバーフローで他のスレッドを見ると、ES6クラス内にプライベートメソッド/変数を持つことは複雑になります。ビューからアクセスできるように、AngularのES6クラスメソッドを避ける

私は角1.5を使用していますが、角度2のコントローラは、クラスを使用して書かれています。将来の移行のためにコードを準備しておきたいと考えました。

これは問題になります。そのクラス内のすべてのメソッドと変数がビューで使用できるようになりました。ビュー(HTML)からは、MyController.privateMethod();が問題になります。

どうすれば対処できますか?私はES6モジュールを使いたいと思っていますが、Angular 2 Controllerの移行にはお勧めできません。

class MyController { 

    constructor(){ 
    this.foo = 'foo'; 
    } 

    privateMethod() { 
    ... 
    } 

    publicMethod(){ 
    ... 
    } 

} 

angular.module('myApp').controller('MyController', MyController); 

ありがとう:

は、ここでのコード例です!

+0

$ scopeを使用し、プライベート関数をそのスコープの一部として定義しないでください。そうすれば、彼らはその見解から呼び出すことはできません。 – yBrodsky

+0

'class'構文は実際には関数を作成し、' prototype'に関数を追加します。 [class syntax trick you](https://github.com/joshburgess/not-awesome-es6-classes)に良いJSの書き方を忘れさせてはいけません。モジュールパターンはうまくいくはずです。 – 4castle

答えて

2

ES6 classは実際にはes5 '古いプロトタイプのパターンの構文的な砂糖です。内部にメソッドを宣言する明示的な方法はありませんpublic/private/protected

本当にの場合はプライベートにしたい場合は、クラス外で宣言してクラスをエクスポートすることができます。 ES6モジュールはグローバル名前空間にありません。モジュール内で宣言したものの、エクスポートしないものは、プログラムの他の部分では使用できませんが、実行時にモジュールで使用できるようになります。この方法では、プライベートのプロパティとメソッドがあります。

しかし
privateMethod() { 
    ... 
} 

class MyController { 

    constructor(){ 
    this.foo = 'foo'; 
    } 

    publicMethod(){ 
    ... 
    } 

} 
export default MyController; 

angular2クレームがES6/ES5で書かれたことができるようにするためにもかかわらず、率直に言って、しかし、あなたは、フレームワークが書かれているTypescriptを使用して比較し多くを失うとJSのスーパーセットであると主張するが、まだいくつかの違いがあります。ちょうど私の2セント。 :-)

関連する問題