2017-08-04 1 views
1

私は問題があり、回避方法を覚えていません。私は第三者指令からコールバックを購読していますが、正しいスコープでコールバックされていません。そしてそれは私がコントローラに当たったときに、実際には他のスコープであることを意味しています。メンバー変数にアクセスすることはできません。私のコントローラのスコープに戻るにはどうしたらいいですか?間違った範囲のコールバック

<ui-gmap-layer type="HeatmapLayer" onCreated="$ctrl.heatLayerCallback"></ui-gmap-layer> 

コンポーネントコントローラ:私は戻って

<ui-gmap-layer onCreated="$ctrl.heatLayerCallback(layer)"></ui-gmap-layer> 

への呼び出しを変更した場合はその後、私のコールバックは、右スコープ(つまり私のコントローラ)上で実行しますが、パラメータlayerが失われた

heatLayerCallback(heatLayer: google.maps.visualization.HeatmapLayer) { 
    this.heatMapLayer = heatLayer; 
    // 'this' here is not my controller 
} 

;/

私はあなたが欲しいコンテキスト(あなたのコントローラ)にコールバックを結合するか、または単にコールバックの前に別の新しい変数に格納し、ことによってそれにアクセスするためにbindを使用することができ活字体、角度1.6および角度成分

答えて

1

を使用していますコールバック内のその変数。

のような何か:

var heatLayerCallback = (function(heatLayer: google.maps.visualization.HeatmapLayer) { 
    this.heatMapLayer = heatLayer; 
    // 'this' here is now the same as the 'this' outside/below 
}).bind(this); // bind to this or whatever context you want 

...または:正確な構文は、あなたの引用されたコードが住んでいる場所に応じて異なる場合があり

var that = this; // store this or whatever context you want 
... 
heatLayerCallback(heatLayer: google.maps.visualization.HeatmapLayer) { 
    that.heatMapLayer = heatLayer; 

(「これは」あなたが欲しいものであるところを見つける例えば、 "this"の代わりに何らかのコンテキストを使用してください)。

+0

ありがとうございます。これをタイスクリプトでどのように動作させるか考えてください。私はデフォルトではtypescriptは 'var that = this'を実行すると思います。 – Chris

+0

TypeScriptはJavaScriptのスーパーセットなので、どちらの方法でも動作するはずです。もう一度、コードの残りの部分がどのように見えるかによっては、私の例で元の 'this'は正しい文脈ではないかもしれません。あなたの状況に必要なあらゆる文脈を使用(バインドまたはストア)してください。また、バインドの例をもう少し説明して更新します。 – Will

+0

ありがとうございますが、まだ動作していません。私の質問をiveで試してみました。 – Chris

関連する問題