在angular2组件中,在ngOnInit中,我想在openlayers地图上点击元素id。这是我的代码:
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保存在全局变量上,但它并没有解决我的问题。
答案 0 :(得分:1)
尝试使用箭头功能(=>)而不是键入功能。它在词汇上抓住了这个含义。
map.on("click", (e) => {
map.forEachFeatureAtPixel(e.pixel, (feature, layer) => {
...
})
});
答案 1 :(得分:0)
问题是,你正在失去this
到你的回调范围的价值,因为它指的是另一个没有myService
实例的对象。
如果您将对建议对象的引用保存到另一个变量(_this
或self
或me
等),则可以稍后使用该变量。
关注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)
})
});
@Fatal的回答是有效的,因为Lambda(胖箭头)功能完全相同(如果它被编译成ES5
),并且是,这是这种情况下最舒服的方法。
但是,知道幕后发生的事情对某些情况至关重要。
请同时阅读(2分钟阅读)article。