2016-08-04 3 views
0

同じ問題を壊す:私はできる限り簡単に言えばのような小型でhttps://stackoverflow.com/a/26244600/2892106呼び出す関数は、ここのようにスコープ

:この回答に続きAngularJS directive binding a function with multiple arguments

これは動作します:付き

<my-directive on-save="ctrl.saveFn"></my-directive> 

angular.module('app') 
.controller('MyController', function($scope) { 
    var vm = this; 
    vm.saveFn = function(value) { vm.doSomethingWithValue(value); } 
}); 

しかし、私は、この休憩を活字体と実際のクラスを使用して変換するとき。

class MyController { 
    constructor() {} 

    saveFn(value) { 
    this.doSomethingWithValue(value); 
    } 
} 

デバッグ時のTypescriptバージョンでは、「this」がWindowグローバルを参照しています。だから私の範囲はどうにか乱れていますが、私はそれを修正する方法がわかりません。どのようにして "これ"がMyControllerを期待どおりに参照できるのでしょうか?

+0

どうsaveFnが呼ばれているのですか? –

+1

コンストラクタの中で、 'this.saveFn = this.saveFn.bind(this);'を実行することができます。迷惑な解決策ですが、機能します。 –

+0

ディレクティブ呼び出しで。したがって、このような指示文では、 ''それは原因が原因だと思うので、なぜか分かりません。 –

答えて

0

だから私の範囲は何とか

は、メソッドの代わりに矢印の機能を使用して台無しにされます。

固定

class MyController { 
    constructor() {} 

    saveFn = (value) => { 
    this.doSomethingWithValue(value); 
    } 
} 

もっと

https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html

+0

これは機能し、リンクに感謝します!クラスのメソッドは太い矢印の関数である必要はないと仮定しました。 –

関連する問題