leaflet-search - Невозможно прочитать свойство 'свойства' из неопределенного - PullRequest
1 голос
/ 13 апреля 2019

Я пытаюсь использовать поиск по листовке. Vue-cli компонент.

При запуске поиска выдает ошибку: Это действительный журнал ошибок. Это относится только к функции поиска листовок.

Uncaught TypeError: Невозможно прочитать свойство 'свойства' из неопределенного в NewClass._searchInLayer (leaflet-search.src.js: 569) at leaflet-search.src.js: 634 на NewClass.eachLayer (leaflet-src.js: 6693) на NewClass._recordsFromLayer (leaflet-search.src.js: 633) в NewClass._fillRecordsCache (leaflet-search.src.js: 774) at leaflet-search.src.js: 736

Карта инициализации -

initMap() {
  this.map = L.map('map', {
    center: [55.75, 37.61],
    zoom: 11,
    layers: this.layer
  })
  this.tileLayer = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    maxZoom: 18,
    attribution:
      '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>, &copy;'
  })
  this.tileLayer.addTo(this.map)

  // add marker
  this.createMarkerLayer(this.marker)
  })
},

создать маркерный слой -

createMarkerLayer(data) {
  const promiseMarkerArray = this.createMarkerArray(data)
  promiseMarkerArray
    .then(res => {
      this.markersArray = res
      this.markerLayer = L.layerGroup(this.markersArray)
      this.addMarker()
    })
    .catch(err => {
      console.log(err)
    })
},
// create aaray markers
createMarkerArray(data) {
  return new Promise((res, rej) => {
    return res(data.map(item => {
      let icon = null
      item.agent !== null ? icon = this.iconAgent : icon = this.iconDefault
      const marker = L.marker(item.coordinates, { title: item.title, icon: icon })
      marker.bindPopup('<p>' + item.title + '</p>').openPopup()
      marker.on('click', () => {
        this.sidebarToggle(item.id)
      })
      marker.alarm = item.alarm
      marker.agent = item.agent
      return marker
    }))
  })
},

создать слой поиска листовок -

createSearch() {
  const markersLayerT = new L.LayerGroup()  // layer contain searched elements
  this.map.addLayer(markersLayerT)

  this.searchLayer = new L.Control.Search({
    position: 'topleft',
    layer: markersLayerT,
    initial: true,
    zoom: 18,
    marker: false
  })
  this.map.addControl(this.searchLayer)

  for (const i in this.marker) {
    const title = this.marker[i].title  // v alue searched
    const loc = this.marker[i].coordinates      // position found
    const marker1 = L.marker(loc, { 'title': title }) // se property searched
    marker1.bindPopup('title: ' + title)
    markersLayerT.addLayer(marker1)
  }
}

Может быть проблема в - layer.feature.properties. неправильно передает значение в функцию.

1 Ответ

1 голос
/ 16 апреля 2019

В данных, из которых я пытался заполнить слой, поиск листовки содержал пустые поля заголовка.Добавлена ​​проверка и значение по умолчанию.

item.title = item.title ||«Заголовок по умолчанию» // проверка !!!!!!!!!!! и значение по умолчанию

for (const i in this.marker) {
    const title = this.marker[i].title  // value searched
    item.title= item.title || 'Default title' // !!!!!!!!!!!check and default value
    const loc = this.marker[i].coordinates      // position found
    const marker1 = L.marker(loc, { 'title': title }) // se property searched
    marker1.bindPopup('title: ' + title)
    markersLayerT.addLayer(marker1)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...