Angular - 从 OpenLayers 的 clickListener 中设置表单值
Angular - Set form value from inside a clickListener of OpenLayers
我正在尝试设置一个简单的表单文本字段,其中包含来自 OpenlLayers 的点击监听器内部的经度和纬度。结果我得到
错误类型错误:无法读取未定义的 属性 'setValue'
为什么 this.lat 和 this.long 产生未定义?我猜是因为我在这个监听器中,因为当我在那个 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);
};
}
问题出在更改的上下文上。这就是 lat
和 lon
不可访问的原因。您可以修改如下,以确保您不会丢失当前的 class 上下文。
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
函数。
我正在尝试设置一个简单的表单文本字段,其中包含来自 OpenlLayers 的点击监听器内部的经度和纬度。结果我得到
错误类型错误:无法读取未定义的 属性 'setValue'
为什么 this.lat 和 this.long 产生未定义?我猜是因为我在这个监听器中,因为当我在那个 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);
};
}
问题出在更改的上下文上。这就是 lat
和 lon
不可访问的原因。您可以修改如下,以确保您不会丢失当前的 class 上下文。
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
函数。