#javascript #leaflet
#javascript #листовка
Вопрос:
в настоящее время я использую листовку, чтобы получить координаты по щелчку, но когда я пытаюсь отобразить всплывающее окно, используя код в документации, я получаю следующее: << Uncaught TypeError: не удается прочитать свойство ‘openPopup’ undefined >> я уточняю, что вижу карту, она создана без регистрации ошибокошибка возникает, когда я запускаю событие onclick, которое я улавливаю заранее, вот мой код :
export class CarteCodeAffaires {
constructor() {
this._root = document.getElementById("fa-carte-codes-affaires")
this._infos_carte = JSON.parse(this._root.dataset.infos_carte)
const bordures = L.latLngBounds(
L.latLng(this._infos_carte.bordures.nord, this._infos_carte.bordures.ouest),
L.latLng(this._infos_carte.bordures.sud, this._infos_carte.bordures.est)
)
this._carte = new L.Map(this._root,{
closePopupOnClick: true,
center: this._infos_carte.centre,
zoom: this._infos_carte.zoom,
maxBounds: bordures
})
// Arrière plan
this._carte.addLayer(new L.TileLayer(OSM_URL, {minZoom: this._infos_carte.zoom_min, maxZoom: this._infos_carte.zoom_max, attribution: OSM_ATTRIB}))
// Empèche de sortir des bordures
this._carte.on('drag', () => this._carte.panInsideBounds(bordures, { animate: false }))
// Donne les coordonnées au clique
var popup = L.popup();
function onMapClick(e) {
popup
.setLatLng(e.latlng)
.setContent("Coordonnées : " e.latlng.toString())
.openOn(this._carte);
}
this._carte.on('click', onMapClick);
}
invalidateSize(){
this._carte.invalidateSize()
}
cacher(){
this._root.classList.add('d-none')
}
montrer(){
this._root.classList.remove('d-none')
}
}
Комментарии:
1.
openPopup
В опубликованном вами коде нет вызова.2. @Pointy есть,
openOn
вызовы в фоновом режиме.openPopup()
Ответ №1:
Это связано с тем, что контекст this
in the onMapClick
не совпадает с this
внешним.
Измените свой код на: this._carte.on('click', onMapClick, this);
тогда это тот же контекст, и this._carte
он найден