問題があり、回避方法を思い出せません。サードパーティのディレクティブからのコールバックをサブスクライブしていますが、正しいスコープでコールバックされていません。つまり、コントローラーにヒットしたとき、this
実際には他のスコープであるため、メンバー変数にアクセスできないため、まったく理解できません。コントローラスコープに戻るにはどうすればよいですか?
<ui-gmap-layer type="HeatmapLayer" onCreated="$ctrl.heatLayerCallback"></ui-gmap-layer>
コンポーネントコントローラー:
heatLayerCallback(heatLayer: google.maps.visualization.HeatmapLayer) {
this.heatMapLayer = heatLayer;
// 'this' here is not my controller
}
コールバックをに変更した場合
<ui-gmap-layer onCreated="$ctrl.heatLayerCallback(layer)"></ui-gmap-layer>
次に、私のコールバックは正しいスコープ(つまり私のコントローラー)で実行されますが、パラメーターlayer
は失われます; /
ノート
Typescript、Angular 1.6、AngularComponentsを使用しています
bindを使用して、コールバックを目的のコンテキスト(コントローラー)にバインドするか、コールバックの前に別の新しい変数に格納して、コールバック内のその変数からアクセスすることができます。
何かのようなもの:
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」が必要な場所を見つけるか、「this」の代わりに任意のコンテキストを使用します)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加