Openlayers在类

时间:2018-02-18 15:53:02

标签: javascript angular typescript openlayers openlayers-3

我有点角色(和javascript一般)。我有这个代码

import {Injectable, OnInit} from '@angular/core';


import OlMap from 'ol/map';
import OSM from 'ol/source/osm'
import OlXYZ from 'ol/source/xyz';
import OlTileLayer from 'ol/layer/tile';
import OlView from 'ol/view';
import OlProj from 'ol/proj';

@Injectable()
export class MapService {
    public  map: OlMap;
    private _source: OlXYZ;
    private _layer: OlTileLayer;
    private _view: OlView;


    constructor() { }

    /**
     * Function initializes the map
     * @returns {} Object of map
     */
    initMap() {
        this._source = new OSM({
        });

        this._layer = new OlTileLayer({
            source: this._source
        });

        this._view = new OlView({
            center: OlProj.fromLonLat([6.661594, 50.433237]),
            zoom: 10,
        });

        this.map = new OlMap({
            target: 'map',
            layers: [this._layer],
            view: this._view
        });

        this.map.on("moveend", function () {
            console.log(this.map);
        })
    }
}

问题出在最后一行。我正在尝试控制在moveend上记录地图的对象(所以当用户拖动地图和释放按钮时 - 我想加载一些数据取决于地图的中心)。 但控制台说对象this.map未定义(即使我在该对象上调用一个方法,它工作正常 - 它在鼠标按钮释放时被调用。

我想这将是一些特殊的javascript,一些本地或全局对象引用等等。

有人可以帮助我吗?

注意:在map组件中调用initMap()方法,如此

ngOnInit() {
    this.map = this.mapService.initMap();

    console.log(this.mapService.map);
}

(在这个console.log案例中,它的工作正常,有_ol_map类型的对象)

1 个答案:

答案 0 :(得分:0)

您的问题是function () {}() => {}之间的差异。

  • function () {}中,“this”的上下文是函数的调用者,所以这里是“OlMap”。
  • () => {}中,“this”的上下文是您创建它的位置,因此这里是“MapService”。

在OlMap中不存在this.map。

要解决您的问题,只需将function ()替换为() =>到this.map.on()。