ionic/angular2アプリを実行しています。表示されているGoogleマップがあります。私はmarkers
と呼ばれる観測値を持っており、これはGoogleマップのマーカーオブジェクトの配列です。私は配列にそれらをマップに表示させるためにそれらをプッシュします。その後、すべてのマーカーにイベントリスナーを追加します。クリックは機能しますが、私はthis.markers
へのアクセスを失います。なぜこれが起こるのですか?より良い質問は、クラス全体でアクセス可能な単純な変数を作成するにはどうすればよいでしょうか?Angular2:Observableへのアクセスを失う
はここに私のコードです:あなたのコールバックthis.markerClicked
が呼ばれたとき、それはもはやクラスにバインドされているので、それはthis.markers
はもはやので、アクセスされていないよう
export class MapView
{
markers: any;
ngOnInit()
{
//initialization for map and the raw marker array data not shown
this.addListeners()
}
addListeners() //functions properly (this.markers is accessible)
{
console.log(this.markers) //displays the markers array properly
for(var i = 0; i < this.markers.length; i++)
{
this.markers[i].addListener("click",this.markerClicked, this);
}
}
markerClicked(marker) //the clicked marker is passed
{
console.log(this.markers);
//here is the problem. The console says that the markers array is empty
//when called from this function
}
}
これは完璧に機能しました!もう1つの追加の質問:アレイからのマーカーのどれが実際にクリックされたのかわかる方法はありますか?私は矢印関数に 'i'インデックスを渡そうとしていましたが、それを働かせることができませんでした。他のアイデア? –
GMaps APIをインラインにしておきたい場合は、marker.addListener( 'click'、()=> {...}) 'のように別のイベントリスナーをマーカ自体に付ける必要があります。次に、必要に応じて、矢印関数内から 'marker'変数を再利用することができます。 – AngularChef