【发布时间】:2018-12-04 06:25:19
【问题描述】:
我正在使用 Leaflet JS 在地图上绘制多边形。
我能够绘制形状,并将形状作为 GeoJSON 保存到数据库,如下所示:
.ts 文件
...
let layer = event.layer;
let geometry = layer.toGeoJSON();
this.drawLayer.addLayer(layer);
}
我在ngOnInit 方法中调用一个方法来重绘形状:
drawPolygonShape(data) {
if (data.polygon.geometry) {
let shape = {
type: data.polygon.type,
geometry: {
type: data.polygon.geometry.type,
coordinates: data.polygon.geometry.coordinates
},
properties: {}
};
L.geoJSON(shape, {
onEachFeature: this.onEachFeature
}).addTo(this.myMap);
}
}
...
onEachFeature(feature, layer) {
layer.on('click', event => {
// layer.bindPopup('Hello World'); // Works great
let popover = this.popoverCtrl.create('MyComponent', { layer: layer });
popover.present();
});
}
我正在将MyComponent 导入到模块文件中,所以我知道它是可用的。但是,我总是收到以下错误消息:
无法读取未定义的“创建”属性
因此,某处存在时间或范围问题,无法正确处理点击事件。
这似乎是一个范围问题,因为任何组件都会给出相同的错误。任何建议都非常感谢!
编辑
感谢@ghybs 我已尝试将this 作为点击事件的第三个参数添加,但我仍然遇到同样的错误:
onEachFeature(feature, layer) {
layer.on('click', event => {
// layer.bindPopup('Hello World'); // Works great
let popover = this.popoverCtrl.create('MyComponent', { layer: layer });
popover.present();
}, this);
}
编辑 2
谢谢@ghybs!
我很好奇您的第二个建议 - 我正在这样设置地图:
let mapOptions: any = {
position: 'topright',
draw: {
polyline: false,
...
}
}
...
let drawControl = new L.Control.Draw(mapOptions);
this.myMap.addControl(drawControl);
this.myMap.on(L.Draw.Event.CREATED, this.onCreatePolygon.bind(this));
.bind(this) 现在更有意义了 - onCreatePolygon 是我用来保存形状的一种方法。
你建议我如何委托给每个形状的点击事件?
this.myMap.on(L.Draw.Event.CLICK, this.MYCLICKHANDLER.bind(this));
(很明显我不熟悉这个工作,所以我很感谢你所有的时间。)
【问题讨论】:
标签: javascript leaflet ionic3