Angular 角度2:无法访问可观察到的

Angular 角度2:无法访问可观察到的,angular,typescript,ionic-framework,Angular,Typescript,Ionic Framework,我有一个ionic/angular2应用程序正在运行。有一个加载到视图中的谷歌地图。我有一个名为markers的可观察对象,它是一组谷歌地图标记对象。我把它们推到数组中,让它们出现在地图上。然后,我将事件侦听器添加到所有标记中。单击功能正常,但我无法访问此.markers。为什么会发生这种情况?也许更好的问题是如何创建一个在整个类中都可以访问的普通变量 这是我的密码: export class MapView { markers: any; ngOnInit() {

我有一个ionic/angular2应用程序正在运行。有一个加载到视图中的谷歌地图。我有一个名为
markers
的可观察对象,它是一组谷歌地图标记对象。我把它们推到数组中,让它们出现在地图上。然后,我将事件侦听器添加到所有标记中。单击功能正常,但我无法访问
此.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
   }
 }
导出类映射视图
{ 
标记:任何;
恩戈尼尼特()
{
//未显示地图和原始标记数组数据的初始化
this.addListeners()
}
addListeners()//功能正常(this.markers可访问)
{
console.log(this.markers)//正确显示标记数组
对于(var i=0;i
看起来是因为调用回调时,
this.markerClicked
不再绑定到类,因此,
this.markers
不再可访问

我看到两种选择:

1) 内联回调并使用arrow函数声明它(arrow函数保留此的上下文)

2) 看起来有点老土,但是。。。您是否尝试过将回调绑定到类


类似于
this.markerClicked.bind(this)
的东西,而不仅仅是
this.markerClicked

,效果非常好!还有一个问题:是否有任何方法可以确定数组中的哪一个标记实际被单击?我试图将
I
索引传递给arrow函数,但无法使其工作。还有其他想法吗?如果您想与GMaps API保持内联,您必须将另一个事件侦听器附加到标记本身,即
marker.addListener('click',()=>{…})
。然后,如果需要,可以在arrow函数中重用
标记
变量。
this.markers[i].addListener("click", (marker) => {
  // do something with marker and this.markers
  console.log(this.markers);
}, this);