Неперехваченная ошибка типа: не удается прочитать свойство ‘openPopup’ неопределенного

#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 он найден