2016-11-22 102 views
0

在angular2组件中,在ngOnInit中,我想在openlayers地图上单击元素ID。这是我的代码:点击地图上的angular2开放层显示详细信息

map.on("click", (e)=> { 
    map.forEachFeatureAtPixel(e.pixel, function (feature, layer) { 
     let id: number=feature.getId(); 
     this.myService.getFeatureDetail(id) 
      .suscribe(data => this.myArray = data) 
    }) 
}); 

,但是当我点击地图,我感到我不能调用未定义功能“getFeatureDetail”的错误,我想还以节省一个全局变量ID,但它不”解决我的问题。

回答

1

尝试使用箭头函数(=>)而不是键入函数。它在词汇上捕捉到了这一点的含义。

map.on("click", (e) => { 
    map.forEachFeatureAtPixel(e.pixel, (feature, layer) => { 
     ... 
    }) 
}); 
+0

谢谢!它的工作原理 –

+0

我认为你必须扩展你的答案,并解释你的解决方案的工作原理和区别。 – DDRamone

0

的问题是,,那你失去的this值到您的回调范围,因为它涉及到另一个对象,有没有myService实例。

如果您将参考建议对象保存到另一个变量(_thisselfme等),它可以稍后使用该变量。

关注this link更多细节

map.on("click", (e)=> { 
     var _this = this; 
     map.forEachFeatureAtPixel(e.pixel, function (feature, layer) { 
      let id: number=feature.getId(); 
      _this.myService.getFeatureDetail(id) 
       .suscribe(data => this.myArray = data) 
     }) 
    }); 

@致命的答复工作,因为拉姆达(脂肪箭头)函数完全一样(如果它编译成ES5),是的,它是这种情况下,最舒适的方法。

但是知道幕后发生的事情对于某些情况至关重要。

请同时阅读本文(2分钟阅读)article