【问题标题】:Angular - Set form value from inside a clickListener of OpenLayersAngular - 从 OpenLayers 的 clickListener 内部设置表单值
【发布时间】:2018-12-06 18:51:17
【问题描述】:

我正在尝试设置一个简单的表单文本字段,其中包含 OpenlLayers 的 clicklistener 内部的经度和纬度。结果我得到了

错误类型错误:无法读取未定义的属性“setValue”

为什么 this.lat 和 this.long 会产生 undefined?我猜是因为我在这个侦听器中,因为当我在那个 ngOnInit 方法中设置一个值时它会起作用。如何从 clickListener 内部设置值?我错过了什么?

import { FormControl } from "@angular/forms";
import { Component, OnInit } from "@angular/core";

declare var ol: any;

@Component({
  selector: "app-spotcreation",
  templateUrl: "./spotcreation.component.html",
  styleUrls: ["./spotcreation.component.css"]
})
export class SpotcreationComponent implements OnInit {
  source = new ol.source.OSM();

  map: any;

  lon = new FormControl();
  lat = new FormControl();

  ngOnInit() {
    this.map = new ol.Map({
      target: "map",
      controls: ol.control.defaults({
    attributionOptions: {
      collapsible: false
    }
      }),
      layers: [
    new ol.layer.Tile({
      source: this.source
    })
      ],
      view: new ol.View({
    center: ol.proj.fromLonLat([18.405, 45.095]),
    zoom: 8
      })
    });

    this.map.on("click", this.clickListener);
  }

  clickListener = function(args) {
    var lonlat = ol.proj.transform(args.coordinate, "EPSG:3857", "EPSG:4326");

    var latitude = lonlat[0];
    var longitude = lonlat[1];

    this.lat.setValue(latitude);
    this.lon.setValue(longitude);
  };
}

【问题讨论】:

    标签: angular openlayers-3


    【解决方案1】:

    问题在于更改的上下文。这就是为什么latlon 无法访问的原因。您可以修改如下,以确保您不会丢失当前的类上下文。

        this.map.on("click", args=>{
           var lonlat = ol.proj.transform(args.coordinate, "EPSG:3857", "EPSG:4326");
           var latitude = lonlat[0];
           var longitude = lonlat[1];
           this.lat.setValue(latitude);
           this.lon.setValue(longitude);
        })
    

    不要忘记删除函数clickListener,因为代码已移到map.on 函数内。

    【讨论】:

    • 行得通!完美谢谢。我会在 4 分钟内将其标记为正确答案 :)
    猜你喜欢
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 2017-08-04
    • 2014-05-09
    • 2021-10-31
    • 2019-02-02
    相关资源
    最近更新 更多