在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)
})
});但是,当我单击map时,我得到一个错误,无法调用未定义的函数'getFeatureDetail‘,我也试图保存全局变量上的id,但它不能解决我的问题。
发布于 2016-12-08 19:09:18
尝试使用箭头函数(=>)而不是键入函数。它从词汇上捕捉到了这一点的意义。
map.on("click", (e) => {
map.forEachFeatureAtPixel(e.pixel, (feature, layer) => {
...
})
});发布于 2017-06-09 09:37:39
问题是,您正在将this的值丢失到回调范围中,因为它引用的是另一个没有myService实例的对象。
如果要将对通知对象的引用保存到另一个变量(_this或self或me等)中,它以后可以使用该变量。
请跟随此链接获取更多详细信息
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)
})
});@致命的答案是有效的,因为Lambda (Fat箭头)函数做的完全相同(如果它被编译成ES5),是的,这是最适合这种情况的方法。
但是了解幕后发生的事情对于某些情况来说是至关重要的。
请同时阅读此(2分钟阅读) 文章。
https://stackoverflow.com/questions/40752972
复制相似问题