2016-11-22 109 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