Я пытаюсь использовать поиск по листовке.
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:
'© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>, ©'
})
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.
неправильно передает значение в функцию.