【问题标题】:Passing this in click handler on map在地图上的点击处理程序中传递它
【发布时间】:2018-11-01 09:37:19
【问题描述】:

我正在尝试在 Angular 4 应用程序中实现地图(使用 openlayers)。我已经以这种方式实现了它: html:

<div id="map" class="map" style="width:80vw;height: 60vh;"></div>

打字稿:
声明:

@ViewChild("mapElement") mapElement:ElementRef;
public map:any;

初始化:

this.map = new ol.Map({
        layers: [
            new ol.layer.Tile({
                source: new ol.source.OSM()
            })
        ],
        target: 'map',
        view: new ol.View({
            center: [2905830.0672892607,5532192.9828046],
            zoom: 12
        })
    });

在我的 ts 文件中,我也有 selectedLat 和 selectedLon(任何类型的变量)。我想根据用户点击地图触发的事件中找到的坐标来设置这些变量。为此,我尝试了以下:

this.map.on('click',this.some_function);

一些功能:

some_function(evt) {
    this.selectedLon=ol.proj.toLonLat(evt.coordinate)[0];
    this.selectedLat=ol.proj.toLonLat(evt.coordinate)[1];
}

我遇到的问题是 this(in some_function) 由地图表示,而不是我的原始组件。 有没有办法让我将原始的 this 元素传递给 some_function?

我也尝试过,但失败了:

this.map.on('click',{param1:this},this.some_function);

感谢您的帮助:)

【问题讨论】:

    标签: javascript events arguments this openlayers


    【解决方案1】:

    正如Openlayers v4.6.5 documents 所说,map.on 可以有三个参数。一个是事件类型,另一个是监听函数,最后一个是你想用作 this 的可选对象。

    所以你可能需要使用this.map.on('click', this.som_function, this)

    【讨论】:

    【解决方案2】:

    将数据绑定到此。

    this.some_function = function(e){
        //this.foo
    }
    
    var data={foo:1};
    this.some_function = this.some_function.bind(data);
    this.map.on('click',this.some_function);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      相关资源
      最近更新 更多