点击地图上的angular2 openlayers显示详细信息

时间:2016-11-22 22:39:43

标签: javascript angular typescript onclick openlayers-3

在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保存在全局变量上,但它并没有解决我的问题。

2 个答案:

答案 0 :(得分:1)

尝试使用箭头功能(=>)而不是键入功能。它在词汇上抓住了这个含义。

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

答案 1 :(得分: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)
        })
    });

@Fatal的回答是有效的,因为Lambda(胖箭头)功能完全相同(如果它被编译成ES5),并且是,这是这种情况下最舒服的方法。

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

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